from lib import st7789fbuf, mhconfig, keyboard, mhoverlay, M5Sound
from font import vga2_16x32 as font
import machine, time, math, random
from array import array

reserved_bytearray = bytearray(135*240*2)

"""
Chaos Dice
Version: 1.0


This is a simple dice app for MicroHydra, which uses the built in ADC to directly generate a true random number, to use as a dice roll.
"""

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CONSTANTS: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_DISPLAY_HEIGHT = const(135)
_DISPLAY_WIDTH = const(240)
_DISPLAY_WIDTH_HALF = const(_DISPLAY_WIDTH // 2)
_DISPLAY_HEIGHT_HALF = const(_DISPLAY_HEIGHT // 2)

_CHAR_WIDTH = const(8)
_CHAR_HEIGHT = const(8)
_CHAR_WIDTH_HALF = const(_CHAR_WIDTH // 2)

# chaosnumber:
_MAX_H_CHARS = const(_DISPLAY_WIDTH // _CHAR_WIDTH)
_MAX_V_CHARS = const((_DISPLAY_HEIGHT // _CHAR_HEIGHT) + 2)
_MAX_TOTAL_CHARS = const((_MAX_H_CHARS * _MAX_V_CHARS))

# RNG:
_MOD_CHARS = const(_MAX_TOTAL_CHARS//3)
_ROTATE_CHARS = const(_MAX_TOTAL_CHARS//10)
_ROTATE_CHARS_END = const(_ROTATE_CHARS + _MOD_CHARS)

_ROLL_CHAR_WIDTH = const(16)
_ROLL_CHAR_WIDTH_HALF = const(_ROLL_CHAR_WIDTH // 2)
_ROLL_CHAR_HEIGHT = const(32)

_ROLL_Y_POSITION = const(_DISPLAY_HEIGHT_HALF - (_ROLL_CHAR_HEIGHT // 2))

_MAX_TRAIL_LEN = const(_MAX_H_CHARS + 15)
_MID_TRAIL = const(_MAX_TRAIL_LEN // 2)
_MID_TRAIL2 = const(_MAX_TRAIL_LEN // 4)



_ROLL_KEYS = const(('ENT','SPC','GO'))


_ROLLSOUND = const(b'6\x00\xb9\xff-!\x1c 3\xc7\xcf\xe5q\xff\xa9\xcfs7XG\xc2\x06Z\xf0o\xc8\x1a\xb6s\xc8\xaf\x0c\xdb\x11e\x0b\x9d.R\x17\xd3\xe7x\xc1\xb1\xd1m\t;\x18\x1f\x14\xf1\x03\x08\xfb\x12\xf5n\xffJ\x0e\x13\xff!\xfc\x16\xf0\x0f\xe7A\xfc.\xf6\xc8\xf2\x1b\xef\xc7\x13s;\x1b\x1c\x8b\x13\xb0\x01t\xed\xf7\xd3\xca\xcb\xba\xf4\xb2\x1c\xde.X\x16\xfa\x08z\x10E\xf8\xfe\xe8\xd0\xee\xd7\x04\xd0\x1f\x96\x15T\x06\xc6\xf4\x1a\xf4\xea\xfb\xef\xfa\x81\xed\xb9\xeb\xff\xfeX\x12<\x1a\xe2\x00R\xf1\xb5\xeb\n\x02\xee\x05\xe0\x05\x02\x04\n\xf8\xc5\xf2`\xe9\xc3\xff_\xf6\x88\xf0\x8f\x04\xf5\x1a5\x12\xd7\xfb\xaa\x027\x01\xbc\xf5#\xfd\\\x04\x86\xff\x92\x00R\xf6\xd2\xeaZ\xef\x95\xf9\xaf\xfe\xef\x0f\xf9\x1bP\x10\x9f\xfd\x86\xf2\n\xf0I\xf6\xd3\x00B\x08\x8f\x0eN\n\xdd\x0b\x83\x14B\x08\xf1\xf7N\xfc$\x05;\xfd\xac\xfa\x1e\xfdn\xf7(\xff\x87\n\x9f\x05=\x04z\n]\x00\xd1\xf0\x87\xf5\xa3\xff\xcb\x07\x01\x07\x9c\x06"\x06k\xfe\xd2\xff\xd8\xf3\x89\xec\x07\xf7I\n\x08\x0c5\x07\x9e\x04\x95\x03\x8e\x04\x81\xfc\x13\xfd\xf3\xf7\x11\xf04\xf8\x8a\xfc\x03\xfc\x04\x07h\x05\x9c\x03u\xffT\xfcc\xfa\xe4\xf4\x82\xfc\xd1\x03t\x01k\x01\xd8\xf9I\xf7i\xf0\xab\xfc2\xff\xa4\x00\x90\x03\x12\x04\xce\t\xac\x04\xe4\tf\xfd\x91\xfb\x9c\xf7\xd9\xfa\xef\xf4\x9f\x00\x86\xfb\x89\x01?\x02\x0f\x07\x1c\x02N\x05I\x02\xb9\xfc\xfa\xfa\xfe\xff{\xff\xa0\x00W\x01\xf1\x02u\x0b\x04\xfc$\tD\xf8\'\x11m\xee\xac*\xa1\x8cp\x11\xd79t\xd8fZ\xe0\x07\xbbA\xf7\xe1N\x00\xd3\xf2\xa9\x18\x96\x1b+\x16\x085T\xfd\xba\xf2w\xfe\x91\xede\xd6\xe2\x12{\xd7\xb5\x08\xc2RH\x1e\xb1\xc0\x9d\xfb\r\xb6\xf4\xf2\xfd\x7f%\t\xb0\x17~\xea\x19\x9aP\xbfv\xcch\x1b\x83\x05\xd9\x03,9\xe9\x0f\x96\xf8\x1b\xa4,\xda\x7f\x19\x07\x1bi\x17#\xe1\xbc\xf9\xcb\xffE\x05\xf9\x1b\xea\xed~\x07g\xeeA\xe3E\x1c\x1a\xe9\x00\xff\xf8\xe1\x00!\xc4I\xb8\x06T\x1b\xc3\xee\x9d\xf5\xb7\xd6\x85\xccK\x10\xf6!l,\xdc\x06#\x140\t\xaa\xd81\xec\xaf\xf4P\x19X"f\rO\x01\xf8\xee\x14\x06\x1b\x02\xc4\xfax\xf0K\xe9k\x08\xb0\x1c\x9d\n\x0b\xf5\xd1\xeay\xe4\xb2\x17\x16\x07\x82\x06\x11\xfe\xfa\xfe\xf1\xf1O\xe8\x92\x04!\xefB\x01\x80\xff\xf2\x1e:\x00Z\xf0\xc4\x0ew\x05\x0b\xef\x81\xf65\x034\xff\x0b\n\xa2\xf9\xfa\xe1\xa5\xf4\xcd\xff2\xf69\x149\x16\x86\x03\xc8\xf5\xed\xf6\xb9\xf3\xda\xff+\x07\xbf\x0c\xae\x15\xab\n\x01\x0e\xf9\x12\xfe\xf9{\xf3H\x06q\t\x89\x03\xbb\x07E\x02\xc4\xf3]\x05\'\r\xbc\x0e_\xfc\xa3\x0b\x18\xfce\xe9w\xff\xfd\x02p\x0f>\xfc\x97\x03\xf2\x07\xf1\x01\x85\xfd\x9a\xf0\xc1\xe7\x06\xf9\xaa\x0c\x0b\xff\x10\x02\x06\x026\x01\x1a\x03\xdc\xfe\xaa\x02X\xf8\xd3\xed\xed\xf9q\xfe\xe2\xfb.\x06\xcc\xffG\x03Y\xfb\xdc\xf2g\xf4\xfa\xf3\xfa\x0b\xfc\xfc\xf6\x04\xd0\xfe\x01\xfd\x1b\xede\xef\xa5\x06j\xfd\xbc\t\xa6\x02)\x10\x8d\x02F\x0e\xdd\t\x1d\xf6\xa4\xf7]\xfaN\x01\xd6\xfdp\x02M\xfb\xfb\x06d\x05\xdc\x04P\x04\xae\xff\xcd\x03\x9d\xfd\xc0\xfd\x8d\xff{\xfc\x11\xffq\x03[\x08\xc0\x08\x8c\xffV\xff\xd1\x05 \x05\xbf\x05c\x05\xba\x05\x83\xfd\x13\xff\xba\x01L\xfe\x0b\x07}\xfdC\xfd\xfa\xfd\xcf\xfa\r\x02\xe2\x01\xe8\xfa\xf3\x00\xe8\x01 \x03\xeb\x04v\xf5\x81\xf1\xad\xedO\xf1\x91\xf2\xa4\xf5\t\x03f\x08q\x04\xf3\x05\x02\x03\xc2\xfe%\xfe\xb8\xf7\xe0\xfa>\xfd\x89\xfe\xc5\xff+\x01y\xff\x0c\x07\xe0\x08_\x04A\x03\xb8\xfd\x1c\xfb\xbd\xf64\xfb\xea\xfei\x02\xcc\x02\xbe\xfd\x90\x02\xa5\x01.\x03Q\x08\xb0\x02V\x00#\x03\xd0\x06\x95\x08\xc3\x00\x19\xf7s\xfb\x95\x02\x06\x02\xdb\x03\xd2\x00N\xfd\x01\x06W\x04\x94\x00\xb5\x00\x10\xfdD\x01\xa9\x02\xfe\x00\xfc\x00\xab\xf6\xf3\xf6\x98\xfd\xe6\xffz\x01e\xff\xe4\x00&\xfa.\xfd\x15\x02\x99\x01\xe5\x00g\xfd\xa3\xfc6\xf9\xcc\xfc\xd0\x00\xfe\xff\xc7\x01\x19\x04I\x04\xf4\xffe\xfe\x8f\x01\x08\xff\xf8\xfc1\x01n\xfd\x0e\xfb\xa9\xff\xd4\x00\x91\x04<\x03s\x01\x9f\xff\xeb\xfe\xe7\x02U\x06\xd2\x04f\x01\xc0\xff\x0c\xfd\xba\xfcZ\xfbJ\xfc\x00\xff5\xfe*\x02\xce\x05a\x05\xc4\x05"\x05{\x05E\x01*\x00S\xfe\x04\xfev\x03\x16\x04S\x03\xba\x01\xde\xff\xe2\x00\xa0\x01\xc9\x02j\x04\xea\xfd\xbe\xfb>\xfaP\xfb\'\xff\\\xfde\x00\x0c\xff\xbc\xff\x98\xffZ\xff\x03\xff\xaa\xfdn\xff>\xfd>\xfe\x0e\xfd\xb4\xfc\x8e\xff\xe6\x00\xe0\xffK\x06d\x07k\x04;\x04\xd4\xff]\xff\xb4\xfd|\xfd\xf1\xfd\xda\x00#\x00\xf6\xfdo\xff[\x00B\x00M\xff\x97\xff0\xff\xc3\xfe\xc6\xfc\x15\xfc_\xfd\xf9\xfd\xbe\x01\xfa\x00\xf1\x03\xf5\x05r\x010\x02F\x02\xac\xff\x8d\xff\xe0\x03\x08\x04l\x06\xba\x04\xfc\x01F\x05\xf4\x03\xc6\x02\xe3\x03W\x02\xf5\x00\x8b\x02\xa9\xff<\xff\xc5\x001\x00\x12\x03U\x02\xf5\x01\xaa\x00c\x00#\x02\xbf\x02q\x04z\x01\xb1\x00\x03\x00S\x01\xa2\x02\xbc\x009\x02\xcb\x02\xaa\x00h\x00\xc3\x01\xa4\x00\xf8\xfd\xe7\xfcn\xfeF\xfeZ\xfd\xfa\xfc:\xfc\x0e\xfbz\xfa\xae\xfbh\xfb\x14\xfac\xfa3\xfe\xd0\xff\x05\x00;\x00\xae\xfe\xee\xfe\x89\xff\xa1\x00#\xff\xa1\xff\n\x00X\x00\xfa\x01\xf7\x013\x03\xcb\x00`\xfe\xe4\xfe\x9b\xfe\xc0\xfe{\xfe\xf0\xfe\'\x00{\x00\xff\x01\xc3\x00\xda\x00\xfe\x00$\x00\xcd\xff#\xff\x1e\xfeK\xfe\\\xff\xd9\x00\x9f\x017\x00\xb7\x01\x9b\x01\xa7\x00p\x00\x84\x01\x9e\x01\xc4\x01\x9d\x00\xf6\xffp\xff\x0c\x00\xfd\xff\x04\x00\x9d\xfe<\xfe\xf7\xfd\xdf\xfd\xac\xfee\xfe\x9f\xfd\xc8\xfd\xf3\xfd\xfb\xfbJ\xfd,\xfcP\xfe\x18\xfe\xe3\xff\x17\xfe\xa1\xffN\xfe@\x00\'\xff>\x00\xe3\xfe\xc7\xff\x93\xfd\x87\xff+\x00\xa1\xff\x7f\x00\xd7\xfej\x01l\x00Y\x02q\xfe\xd4\x02k\xfd:\x02\xed\xfc{\x03y\xfd\x9d\x05\x13\xfd\xcd\x04\x92\xfb\x99\x041\xfbH\x08\xc1\xf8\xaf\x11\xee\xd1\x87\x8b\xa3WU\x01\xf2\x1bd"\r3Z%6\xe7\xab\x1a\x04\xdbp\x0fV\x1d* Y\xf4G\x03\xcc\xe8\xd3\x0cz\x1aW\xdf\x151U\x1d\x94\xdfL\xe0B\xef\'\x01Z?\xa3&\x9f\xe7\x89\xf6\xe1\xcf$\xf3\x1b\xed\xd3\xae\x0c\xde\x98\xf2U\x11 C\xe0?\xa4\x14\x97\xd5\xed\xdc\xd7\xf3f\xe9c\x08\xd2\x00u\x0c\xba\x11\xc6\x01\xcf\xfe\x9a\x08&\xff\x9a\xdd\xdd\x10l\rt\xd1\xe5\xd4\xd6\xdd+\x15\xb25\xef\x1f\x9b\x0fs\xf88\x01\xe5\xea\t\xd2\xd5\xe4\x01\xfdj\n\xbc\x12\xaf\x1a\x90\x1d^\x12\xef\n\xad\x01\x03\xfa\x02\x0cw\x0e\xe1\xf8\xb9\xef\x7f\x05\x0c\x02X\xff\xcf\xf3\xa0\xeb2\x02!\n}\x16b\xff\x19\xe6\xb0\xfb6\x15\xb8\t\xd7\xfel\xfa\x96\x04\xbb\xf6\r\xee\x1f\xf1\xa4\xef\xfc\xf4|\xf3\xd9\x0b\xf4\x05\x9c\r\r\n\xc9\t\xa7\x05\xca\xfa5\x02\xba\x00C\xfc\xd8\xf0q\xe85\xf1b\xf6q\xf3\x17\x02\x10\x06\xd3\x0c\x90\x16\x97\x05\x8d\xec\xa9\xee[\xf2\xb0\xff^\x07\x86\x13\x8a\x1d\xd7\x10D\x0f\xf3\x06E\xfc\xe6\xff\xfe\xfa\x00\xf8\xb7\xfb%\x00\x02\x020\x04\x82\x07N\x04\x10\x10\xb4\n\xa8\x03\xcd\xfcQ\xf6\n\x02\x02\xfe\x91\xfe\xa7\xfeg\xfb\x8e\x02\x9a\x03\xd6\xfas\xf2\xac\xfc!\x03\xa6\x08a\x08\x14\x01C\xff\x92\xf8\n\xfe\xec\xfd3\xea\xc4\xef"\x01&\xf6\x8e\x02\x15\t\xc4\x05g\x03\xed\xf7\x13\x01\x14\x03\xcc\xfeq\xfa\x9c\x01\xcf\x04\xec\xf5M\xf5P\xf9\xa4\xf8\\\x05J\x05\xca\x02\xa1\x04\xfe\t2\x06[\x088\n-\x063\xfe\xc4\xf59\xf6\x9f\xf7\x16\x04\xae\x05\xa4\x02g\x04\xf2\x08\xdd\x05\xe4\x08\xb1\xff\xa6\x00s\xfa\x0c\x03\xf4\xff\x84\x02T\xfe\xeb\x05@\x02\xbe\x03\xf4\x05\xe7\x01\xdc\xff\xbd\xfe\xd3\x05\x1e\xff%\x01[\xf9\xdd\x03\xb9\xfe*\x08R\xeb\xe4\x14\xc1\x88<\xf2\xdb3l\x02dF\xa2\x03\xed%*\x04\xbb\x0fA\xeb\xe8\x1c\xd3\xeb\xb1\xe0\xe9\x18i\x05\xfa\xf4\xbb\x10\x17\x14\xae\xf8\x05\x124\xf1\xa9\x0f\xba@\x00\xe7K\xd6\xa6\xf5\x03\xe2\x97\x15\x14\xfd\xc1\x15\x93\xeb\xf8\x17[\xf4<\xa7\xfe\xd0I\x05\xc3\x15\x85\xee\x19Dt#\xa7\xfc-\xd9\r\xd2#\x02u\xfd\\\x17\x96\xffO\x00&\x11\xc1\xff\xc5\x17\x82\xef!\xdcT\x01\xe9\x05\x02\x11\xdb\xe4\xaf\xd8/\x00-\x1d\xb8.\xc1\xffb\xff@\x00\xbf\xf3\xc8\xef\xce\xe2;\x00d\x02\x0e\x06\xa0\x11\xb1 \x1b\x15\x8e\xf9]\x041\xfe\x0f\x11w\x0f\xf6\xed,\xec\x1f\xf0\x97\x07\xf4\x07\xc1\x05\xe2\xfc\xd2\xf0\r\xfe\xe2\xfdN\xff\xae\x00\xb8\xfdG\t\xe0\x19\xb0\xfe\\\xf2\xcb\xf62\xfc\x82\xf64\xe5}\xf1\xc8\xf8$\x06\xca\xff\xe5\x02\xc2\rc\x131\x10\x04\x043\xf8t\xecM\xf3\xdc\xf8\x1b\xfd\xa7\xfa\xfb\xf7r\xfae\x05c\x02\xdf\x08C\n\xce\nW\xfe\x86\xf5\x15\xfc\x9d\xe8\xff\x05o\x0fD\x0c!\x18\xac\x0c\x9d\x08\x0f\x054\xfd}\xf2\x1d\xfa\xdf\xfd\xe3\xfeQ\x001\x01\xd8\xfe\xdd\xfb;\x04\x87\x03\xae\x04f\xfb\x1e\xef\x87\xfc\x0b\x04\xf4\xfb/\xf9)\xfa\x8a\x02\x1e\xff\x14\x01\x8f\xff\xb0\xf7m\x00\x84\x02\x91\n1\x0b\\\x03\x1a\xfe\x12\xfc\x81\x008\xf8#\xee\x97\xefR\xfd\xfa\x04\xf9\xf8\xa5\x06\xe4\x06O\xfe1\xfcP\xfc\xd6\x08\xca\xf9$\xfe\xc8\n\xcf\x00\xfc\xfe\x00\x00\x07\xf5\t\xf8t\x01\xdf\x05i\x06\x05\nh\n\xf0\x07?\x08\x00\x07\xa2\x06<\xfc\\\xf8@\xf8\x9b\xfb\x84\x01{\x030\x02\xb9\xfc_\x01\x9c\x031\x00\x96\xff\x04\x00s\x04\xcd\xfd\xd1\xfe\x14\xff\xbc\x03\x11\x01\xf2\x00P\x056\x01\xa9\x03\xca\x01\xf3\x04\xa5\xfe\xd1\x00\xf3\x01\xcc\x00_\xfeX\xfd7\x05!\xfe\xc5\xf8#\xffi\xf9\xec\xfa\x00\x01g\x02\x93\x01V\xff\xd6\x04\xd2\x00v\xfe%\xfa\x1f\xf5\x97\xf6D\xfa\xa9\xfb\x1c\x02\x1c\x07\x91\x08\xf7\x04X\x03\xbf\x03`\x01\xd6\xfd\xcd\xf7\x91\xfd\xe0\xfe:\xf9|\xf6\xc6\xfd\xc9\x03T\x046\x03\xa7\x02\xb3\x00v\xfd\xf1\xff\xf2\x02\x8c\xff\xb8\xff\xa6\xff\xa6\xfd\xe0\x00d\x00\xf1\x05\x93\x04y\x02\x80\x03\x01\x02>\x03\xa4\x04?\x00\xf9\xfc\xbb\x03\xc7\x04\x8d\x00w\x02\xed\x00\x96\xfc\xde\xfd0\xfeG\xffZ\x00\x9d\x00\x1d\xfe\x97\xfc\r\xfe|\x02\xd6\xff\x12\xfd\x89\xfe\x17\x00\\\x03e\x03\xf6\x02`\x01O\x00/\x01L\x035\xfe\x8a\xfe\xb8\xfe \xfb\x8e\xfc\xd8\xfdf\x00B\x01\xcd\x02\xc9\x00\xa6\x01\xfd\x02\xfe\x02Z\x02\x86\xfd\xce\xfe\xa9\xfc\xc9\xfa3\xff\xd8\xff\xe3\xffX\x00\x85\xffH\x019\x02\xa4\x00\x85\x02\x9d\x03,\x03\xdf\x01\x89\xffF\xff\xe9\xfd\xff\xfc\xf7\xfe\x0e\xff.\x00P\x03\xf2\x03 \x04\xeb\x02\xcf\x01\xd1\xfe\xa1\xfb\xcc\xfb`\xfc[\xfb\xe2\xfb\x89\xfd%\xfd\xaf\xfc\xa9\xfc\xc7\xfe\xa7\xff&\xff\xe2\xfe\xbc\xfb\x14\xfbg\xfd\x1c\xfcQ\xfc<\xff\x84\xff~\x00\x8e\x02\xae\x017\x00L\xff[\xff\xd0\xfeF\xfe\x11\xfe\x8f\xfb\xd5\xfd\xcc\xff7\xff;\x03q\x06\xc4\x06R\x05\xf8\x00!\xff}\xfez\xfe$\xfe,\xfe\x19\xff\xcb\xfd+\xfd\x86\xff\x83\x00`\xfe!\xff#\xff\xf4\xfce\xfc\xe4\xfdt\xfd\xd8\xfd\xa8\x00\x8c\x01\xf4\x01\x9b\x03\x92\x03\x06\x01\x00\x01\xe1\x00\x97\xff\xc4\x00x\x01/\x02\xe5\x03\xc7\x01\x01\x01{\x02v\x00\x12\x01\xd2\x013\xffd\xff&\xffV\xfe\xa7\xfe\xee\xfe\xeb\x00\xb5\x00\x93\x00\xef\x01\xd2\x00\xdd\x00o\x01\xba\x01\x88\x019\x00\xf7\xff\x1a\x01\xbf\x01?\x01\x16\x01i\x01\xba\x00?\xff\xb6\xffJ\x01J\xff@\xff\r\x00\xe7\xff\x10\x00\xf1\xfed\xff\xa9\xfe\xc6\xfd\xef\xfb\xca\xfag\xfb\xb6\xfb\x99\xfd\xb4\xfe\x19\xff\x8b\xff\\\xfe4\x00\x14\x00\xe4\xffk\xff@\xffH\x00j\xff\xa0\x00\xdf\x00\xd0\x01Q\x00 \xff9\xff\x82\xfe1\xfe$\xfe\xdc\xfe\xd2\xfeJ\xff\xdb\xffR\x00 \x01\xf6\x00h\x02c\x02l\x00\xc5\x00\xa1\xff-\x00\xd1\x00\xc7\x00\xe8\x01\xb4\x00%\x01\x1e\x01`\x00\xec\x00\x95\x00s\x01e\x01\xa9\x01/\x01q\x00\x81\x008\x00\xb6\xff]\xfe\xce\xfe\xf6\xfe\xa4\xfe1\xfe\x00\xff\r\xff:\xfe6\xff\xc0\xfe\xd9\xfe?\x00\xc3\x01\x1d\x02\x8c\x010\x01\x7f\x01u\x01\x9e\x00\x17\x00\x1e\x00\xf6\xff\x9c\xfey\xff\x86\xff\xf8\xfe2\xffU\xff\xcc\xff\x0e\x00\xf4\xff\xfe\xff\x87\xff\xc3\xff\xb1\xff\xd2\xfe\r\x00\xcc\xff\xd8\xff\xb9\xff)\xfe\xaf\xfe\xc0\xffj\xff}\xff\xb8\xff4\x00X\x00\x86\x00\xbe\x00\xb5\x00\x00\x00H\xff\xb3\xff\x06\xff0\xff \x001\x00{\x00r\x00n\xffu\xffW\xffr\xff;\xff\x8c\xfe\x9b\xfeb\xfe\x08\xfe\xf0\xfdN\xfe\xef\xfe\x03\xffJ\xff\xa1\xff\x8a\xff\xb2\xff\x8c\xff\xf4\xff\x95\xff\r\x00\xe4\x00\xb5\x00\xd7\x016\x02\xbd\x01\xc8\x01\xfb\x01\x8d\x01\x10\x01\xa3\x00\x92\x00 \x01y\x01\x0f\x01\xf5\x00/\x01\xbf\x01\r\x02,\x02\x1a\x022\x01\xa7\x01\xbb\x01\x19\x018\x01 \x01x\x00f\x00\x08\x00\xe8\xff2\x00\x91\x00\xad\x00\x9a\x00\xb3\x00?\x00k\x00Q\x01\xd9\x01\x00\x01\xd3\x00\xeb\x00\xe6\x00\xb9\x00g\x00+\x00\x0c\x00?\x00d\x00D\x00\xd9\xff\xb3\xff\x83\xff\x97\xff*\xff?\xff\xa3\xff\xda\xff\xcf\xff@\xffh\xffH\xff\xcd\xfe\xfd\xfe}\xfe\xe4\xfdz\xfej\xff\xd5\xff\xc1\xff\xc7\xff\xb8\xff\x1d\x00\xcd\xff\xd4\xff\x8e\xff\x0f\xff%\xff\xa2\xfe\xaf\xfe}\xfe(\xfeA\xfe\xac\xfe\xa0\xfe\xd7\xfe4\xffQ\xff\xb8\xff\xa1\xff\x97\xff\xa4\xff\xa9\xff\x9b\xff\x96\xff\xb1\xff\n\x009\x00\x1b\x00V\x00S\x00\x8c\x00\xaf\x00\xb2\x00\xf5\x00R\x01\x99\x01~\x01\x8d\x01\xb7\x01\xf5\x01\xe5\x01c\x01B\x01\xd3\x00Y\x00\'\x00\xe4\xff\xf7\xff\x9d\xff\xd2\xffW\x008\x003\x00@\x00\x0f\x00\x05\x00\x01\x00\xff\xff\x0b\x00\xca\xff\x89\xff?\xff2\xff9\xff\xda\xfe\xfd\xfe\xee\xfe\x0c\xff\x1f\xff1\xff\xad\xff\xb8\xff\x0b\x00A\x00\x1e\x00\xd5\xff\x9d\xff\xa3\xff\x85\xff\xca\xff\xb4\xff\xaf\xff\x11\x00)\x00o\x00\xae\x00\xc6\x00\xe3\x008\x01B\x01&\x01(\x01\xe3\x00\xec\x00\xa5\x00W\x00Q\x00\x1e\x00\xf3\xff\xe7\xff\x97\xff\xab\xff\xde\xff\x01\x00\t\x00\x13\x00\x08\x00$\x00)\x00H\x00_\x00\x01\x00\x1b\x00\x06\x00\xa1\xff\xa2\xff\xe4\xff\x14\x00*\x00 \x00J\x00V\x00P\x00\x9b\x00\xa8\x00V\x000\x007\x00\x1d\x00^\x00/\x00(\x00c\x00J\x00t\x00u\x00v\x00R\x00\x9b\x00\xd1\x00\xa5\x00b\x00e\x00\xb1\x00\x98\x00\x8b\x00\x93\x00\x81\x00\x8f\x00i\x00\x12\x00\x0e\x00\x13\x00*\x00|\x00?\x00w\x00^\x00{\x00\x9d\x00<\x00<\x00\xff\xff\xb4\xffM\xff[\xff#\xff#\xff\x16\xff;\xffk\xff\xb4\xff|\xff\xc9\xff\xe1\xff\x02\x00\xef\xff\xf6\xff>\x00\xba\x00\xe8\x00\x97\x00\xd2\x00\x0c\x00\xc4\x00\xef\xff\xbd\x008\x00/\x00\x89\x009\x01/\x01)\x01\xca\x00\x8f\x01\xdb\x00.\x01V\x00\x1f\x00\xe7\xff\xa6\xffQ\x00\x8c\xff\xc5\xff\x82\xff\xa9\xff\xa6\xfe\x89\xff\xcd\xfdy\xff\xb7\xfed\x00\xdd\xfdG\x00\xcc\xfd\xdb\xff\x84\xfek\x00\xe8\xfd\xfe\xff`\xfe\xbe\xff\x8b\xfe\xca\xfe\x10\x00\x1d\xfe\xf8\x00\x93\xfc\xab\x02\xc3\xfb\xd9\x05o\xf7}\x12\x01\xb6\xbf\xd2\xea%\xa9\xf9f\x1fM\r\xbc\x18\x82\n\x10\xf7\xb3\xfb\xb4\xfd\x10\xf7\xa8\x02\x1d\x11\x8f\x02\xb2\t;\x0eX\t\xaf\t8\x01Y\xe9\'\xe5\xb5\x0b#\x08[\x10\x81\x1c\x13\x0e\xa4\xed\xd0\xd5\xe9\rG\xf1\x82\xeb\xa1\xf7)\xda,\xeb\x93 s,\xab\x0cz\xfeU\x0f\x85\x0cJ\xecB\xf4S\xe6u\xef\xd1\xf5\x12\x08#\x1c\x90\t\xf4\x07{\xfa\xd6\t\xa4\t\x0c\xec\x14\xe9\x1f\xe9\xeb\xfd;\x06\x1e\x00\x82\r\x84\x0f\xe7\xf9g\xee\xdf\xfe\xcf\x0b.\xff \xf1\xdc\xe9\xc0\xfcj\rm\x0cq\x13@\r\xea\x13\x1a\x0b\xb2\x01\x9b\xf1\xd8\xf0\xf5\xf4\xce\x02\x84\xff2\x02\xce\xf2(\x06\xc1\xf3\x89\x9dn\xfd\xc0\x07+\x19^)\xa1\x08\xc6\x1a\xa7\x06\x88\t\xf8\rW\x01\xa9\xec\x93\xed\x04\xfap\xfd2\xf7E\x0e\xf6\x06\x83\x18>\x0f\x83\x0c\xb5#\xab\x05\x05\xeb\xf8\xe7C\xf9\xc5%\xf4\x04\x07\xca\x0c\x05\xc1\xf0_\n\x98\xeb\xa4\xc8@\xdb\xac\x039\x04\xd51\xf5.\xe0\x99\xf4\x177\t\xd8\x17+\x1c=\x05\xfb&\xc2\xf6\x0f\x03\xec\xf3)\x06\x80\xf84\x0f\xfa\xedU\x03h3\xa8\x02\x86\xef\xdc\xf2\xe2\tT\xe9\xe7\xfel\x11\xa9\x08\x85\x17\xa7\x05[\xfe\x1e\xc4\xeb\xf4\x81\xf1\x0c\xd9\xd5\x14\xf8\xfbs\xf1#(\x93L@#\x15\xf9P\xfbT\x11\x94\xd6<\xe9\xfb\xf1x\xe6l\x00\xb4\xf7\x10\x15\xaa\x07[\xffs\x00:\tx\x1f\x17\x02\x85\xec\x96\xdd\xb6\xdf_\x03\x84\xfaJ\x02P\xf9\r\xeey\xf8\xa1\xf8$\r\x12\x00\x18\xfet\x02s\xfbE\x06 \x08\x1a\n\x15\x08"\n\xb2\x11\xd4\x04\x93\xf1\x01\xebM\xf7\xee\x05\r\x03h\x00\x12\xf2\xe7\xfe\x19\n\x1e\xff\x14\x00\xf9\xf6[\x0e\r\x1cT\x14\x02\x16\x08\x0b\xbc\xfc\xc1\xfdZ\xf5\xcb\xf8\xe1\xfb\xb9\xfe\xa6\xfb_\xf7@\x06]\xfa+\x02\xee\n$\x05\xf4\x10B\x0fM\x01|\x03\xa6\xfdq\xea\x89\xeb\xb1\xf6\x81\xf4\x15\xff\xe2\xfb\xa9\xf3\xc8\x04_\x0c\x10\t0\x0b%\n\x9a\x05\xa4\xf5\x9d\xf3\xd2\xfa\xa2\x00&\r\x1a\x00[\xfa\x01\x01\t\x06\xd2\xf8\x9f\xf3\xba\xf8"\x04(\n\xe2\x041\x05\xe6\x08#\xfb\x89\xf8\x1e\xff,\xfa\x1a\x04H\xf9i\xfe7\x01\xde\xfb,\x02l\x024\xfe\xb6\x08\xc9\x08U\xff\x18\xfe\xe6\xfa\x19\xff}\x08\x0f\x0e\xc5\xf9\xe5\xf3\xf7\xfd\xc6\x02\xf4\xfbw\xf6\\\xf8P\xff\xd7\x03l\x07=\x07\xc3\xff\x8c\x00v\x03-\t\xa7\x04\x18\xfer\xff,\xfb\xcf\xf2\x1c\xf8r\xfb\xf9\xffZ\xfe|\x00(\x01\xd4\xfe`\x06 \x01\xb4\x05\x8d\xfdz\xfd\xd3\x02_\xfc\xa0\xff\xf3\xf9\x96\xf9y\xfd\x92\xf8\xdd\xf8\xf6\xfe\xb2\x00Y\x01\x9a\xffI\x03]\x07y\x07_\x03m\xfd\x07\xfeg\xfa&\xfbV\x01\xf1\xfeM\xf5\x93\xfco\x05E\x04\xaf\x04{\xfd\xaf\x009\x05\xb0\xfb\xe5\x00\x12\x03a\xf6\xe9\xfa\xc5\xff&\x02d\x00\xdb\x08\x96\x0f\xd9\x03:\x00@\xfc\x03\x00H\x00P\xfa\xef\xfc\x1c\xfeJ\x03\x89\x06!\x03\xac\x05\xf5\x02i\xfc\xbf\xfa\x9f\xfd\x01\xfeu\xfe$\xfdG\xf9\x1c\xf8F\xf4\x93\xfe\x9b\x06\xd4\x02\xc6\x01\xbe\x05:\x08h\x06\xee\x03V\x00\x18\xfc7\xf6\x9c\xfa\xf7\xfe\xb1\x00\x06\x02\xd4\x01I\x06\xa0\x02\xf4\x00X\x00I\xfds\xffP\x02\x08\x03>\x01\x9c\x01\xf5\xfd\xdd\xfb\xb7\xfc\xaa\xfc\xb8\xfd\x02\x00\x0c\x04\xdd\x02\x8e\x04\x94\x05%\x03\xd4\x00E\x02\xc0\x06w\x02\x88\xfd\xb4\xfd\x1f\x00\xb0\xff\xaf\x01\xa4\x00\xfc\xfe\xb4\x00\xb4\x00\xd4\x01\xc2\xff\xa4\x01\x97\x01\x9e\x01\xf7\x00b\x04\x93\x053\xfe\xf3\xfef\x01\xc3\x02\xac\xffj\xfe\xa3\xff\xe5\xfd\xbf\xfd\xa6\x00?\xfd\x91\xfd\x9b\x01\x08\xfe\xa7\xfe\xd8\xff\x0c\x01\xce\x00\x80\xffh\xfd;\xfal\xfc\xee\xfb\xa7\xf9\x89\xfb\xfd\xfc3\xfe\xc1\xfe\x81\x01\xdf\x03(\x04\xf1\x03\xa0\x03\x8d\x01\\\x00\xb8\x01\xba\xfeq\xffQ\xfe\xea\xfb\xab\xff\xd5\xffM\x01%\x01\xde\xfd\xc4\xfc\xf2\xfb\xfb\xfd@\xfc\xed\xfb@\xfd&\xfc+\xfc\xb5\xfd\xf8\xff\xd2\xfex\xfe\x9e\xfc\x0b\xfc\xa2\xfc\xf4\xfbo\xfe\xba\xffI\x00\x18\x01\x10\x03s\x02?\x02\x01\x05\xb9\x03\x1c\x03S\x01+\x01s\x00\xf0\xfc\xc2\xfd\xda\xfd\x85\xfdu\xfe\x92\xff\x1f\x02\xc6\x02\x89\x01\xab\xffn\xfe\xd5\xfeK\x01\xf1\xfd \x00\xd7\x00\xf2\xfe\xb5\xffw\xff6\xff)\xfd;\xffB\xfe\x03\xff\x19\xffg\xff\xe4\xff\xb1\xff\xd5\xfe\xa4\xfe\xf1\xfdG\xfd\xb3\xfb\xae\xfd|\xfa\xd7\xfe\x03\xfe\xa5\xfe-\xfc\xb2\xfd\x10\xff\xfb\x00>\x00\xc8\x00\xc0\x00\xd8\xff\xcd\x04\x9a\x00\xc0\x02\x9c\xfda\x03\x1e\xffk\x05\xae\xfc@\x04]\xfa\t\x05\x88\xfa\xd3\x08:\xf8\x11\x0c\xfc\xe2\xba\xa2\x05\x1e\x96\x13\x88\x12\xa8\x11\x99\x0e9\xfd\xda\x02\x1b\x11\xd4\x0e@\xfb\x8f\xec8\xf2\x8b\xfa*\x08b\x00\xeb\x13"\x01\x1d\r\xbd\t\xd5\x0f\'\x12P\xf7\xaa\xedX\xe5\x0f\x10\x05<\xdf\xe9\xca\xd2\x99\x13\xe8\xf1\x0e\x06\xeb\xee:\xbb\xb6\xf8/\xef\xdb\x14\xd4%\\-x\x0cC\xe4\x94\x1bX\xf9\xc1\xe6\x88\xeb\xbd\xf4\xdd\x0b\x0e\xfbR\x06\xe4\rH\xf5\x15\xfa\xfe\xeb\x7f\x12\xee\x15E\xf0Z\xdc\x1f\xf3\x88\x1cW\x03\xb4\xfb\xd6\x02\xc2\xfd\x1a\x05\xda\xfa\xcf\xf9\x16\xff\xc7\xe3T\xf7\xd8\x01S\x13\xf6\x07\xa5\x10(%\xe5\x04u\x0e_\xfbW\xefi\xeej\xf60\x036\x04&\nm\x05,\xf8?\xf1\'\xf1g\xf6\xcf\x02\x8e\xf6 \t\xdc\x19r\x0eQ\xfa>\xf3\xf4\xfd\x96\xff,\xf4\xa6\xe85\xf4C\x08\x9d\x03\x9e\xf8"\x04\xf9\n\\\r\x83\x05\x18\xff\x01\x01\x8e\xfa\xa7\xfb\xb6\xfev\x04\xb4\xfe\xee\xfbJ\x01t\xfb\xfe\x01\xf8\xf6\xc4\xfe\xad\x00F\x064\x04M\xf8t\xff\x01\x0c\xb9\x0f\x9e\x04\xfa\x07\xd1\x0bV\x02B\xf7\xcb\xfe)\xfa\xc5\x01\xea\x03Y\x03q\xff\xdc\x07\r\xff\xfa\xf9\x1b\x02\xd5\xfeV\x059\x04\xbf\x03\xfb\x02\xac\xfdp\xfc7\x06+\xfe\xee\x01K\x04p\x06\xf9\x00c\x01A\x05\xa5\xfa\xd4\xfd\xe9\x06\x00\n\xd3\x06\xbc\xf8|\xf9\xe0\xfd\x81\xf6\xe3\x01k\xfb\xad\xfa\x07\x01$\xff\'\x00U\xf9h\x01S\x07\xe0\x03\x9f\x00\xc1\xff\xab\xfb\xc8\xf7\xde\x00+\xf7\x81\xf8E\xff\x96\x01\x82\x07\xa5\x07\x1d\x03E\x03\x9e\x07\x81\xfb\xdb\x00\xae\x00O\x01E\xfc\xe5\xfa\xff\x05K\x06\xab\x08J\xffD\xfe\xe8\xfb~\xff6\x00\'\xfe\xb8\x06\xc0\x02\xf9\x01f\x03\xff\x02a\x01\xd9\x005\x04\xa9\x05\xe8\x01\xde\x01W\x05\xb7\x00\xf5\xfa\x97\xfd\x93\x04\x1b\x01\xbf\xfb\x80\xfe\'\x00\x99\xfeY\xfe\x10\xff\xa8\xff?\xfc\x0f\x01L\x03\x01\x02\x9e\x04\xdd\xff\xed\x00\xb5\xfb\xb1\xf9j\xfe\xaa\xfb\xc5\xfd\x8d\x00\x04\xffz\x05P\x07\xba\x00\x19\x01\x1c\x033\xfe\xa7\xfdj\xfd\xf4\xfc\x87\xfd\xff\xf95\x00W\x01\x16\x00\x17\x00k\x00\x84\x00\x1a\x00\xe1\xfd7\x00\x80\x01a\xfc\xda\xfc\xb5\xff>\x01a\x01\xc0\x04l\x02.\x02m\x01\xf1\xfeM\x02;\xff\x90\xfe\xfb\x00*\x03#\x06;\x002\xfeU\x01\xdc\x00\x95\xfeN\xfd\xdf\xfe\xa6\x01<\x00\x97\x00\x8f\xfc\x9f\xfd\x01\x00\xab\x02\x18\x03\x1f\xfd-\x01;\xfe\xe3\x00\xe1\xff(\xfd\x06\x01\x83\xff\xb8\xfe;\x00A\xfeJ\x00\xe7\xfe\xdc\xfe.\x00\xc0\xfd\xd0\xff;\xff\x04\x02\xce\x00>\x00\x95\x02\x10\x03\xa3\x00n\xff[\xfd\xfa\xfdV\xfe\xbe\xfe\xd7\xff\x1b\xfe\x8e\xffa\x01\x13\x04 \x03\xb0\xff\x94\x00\xac\x01\xd7\x00]\x01\x0b\x00{\xff\xd6\xff\xaf\xff\'\x00\x07\x00\xa2\xff\xbb\x00N\x00#\x02\xa9\x01M\xfe\xeb\xfe\x9f\xfe\xd8\xff\x9b\xfd\xae\xfe\xd5\x00\xde\xff\xa5\xff\xf1\xfd\xa3\x00\x8f\x00\xce\xfdR\xff\xfa\xff%\xfe5\xfe[\xfe\xd5\xfdq\xfe\\\xfe\xcc\xff\xff\x003\x00\x8b\xff\r\xfe\xb7\xfe\x92\xfe~\xfd\n\xfd\x92\xfd\x12\xfeG\xfd\xe0\xfe\x88\x00\xa4\x01\xb7\x01e\x02\xf0\x01\xd4\x00\x03\xff>\xffo\x00\xf5\xfeR\x00\xcb\x00\xa3\xffG\x005\x00\xd2\x00\xd3\xff\x04\xffJ\xfe\x94\xfcY\xff\xf3\xfe\xb7\xfe\x8e\xff\xb1\xff\x0b\x01\x05\x01\x97\x01\xa6\x01~\x00T\x00?\x00\\\x00\xe9\xff\x8b\xff\x9d\x00\xa6\x01\xe1\xff\xc4\xff\x03\x01\xe0\x00\xed\x00\xe3\xfe\x1c\x00\xbf\xff\x04\xff\xe9\xff{\xff\x93\x00i\x01\x9b\x01\xb7\x02\x80\x02\xf7\x01\xb8\x01\xf9\x00\x86\x01\'\x01\x9e\x00\x18\x01\xe3\x01\x91\x01\xb7\x00\xf9\xff\x06\x01\x93\x00\x13\x00\x10\x00\xb9\xff~\xff\xfe\xfe\x86\x00\xcb\xfe\xff\xfe\x92\xff)\xfd\xa5\xffg\xfd\xd9\xfd\xaa\xfd6\xff>\x01H\xffU\xfe\xa4\xfe_\x00G\x01c\x02\x11\x00j\x02H\xff\xc6\x02\x11\x00\xa5\x00\x8a\x00k\x00\x85\x01\xb4\x02|\x00\x08\x00g\x01@\x00?\x026\xff\xe5\x00G\xffm\x01\x15\xfff\x01p\x01\xb6\x03w\xfc0\x02t\xfd\x15\x03m\xfc@\x04\xab\xfb\xd5\x06\x88\xfb\x98\x0fK\xf1\xd7\x94p\x18\x04\x1e\x94\x07H\r\xaf\x1b\xf3\n\xd6\xf5\xb9\x0c\x14\xef.\xfd\x8a\xfa\xbc\rT\x1e:\x1b\x05\xfb[\xfc\x9e\n\x86\xd3\x1f\xdb\xf6\x13\xa5\xfe\xa9\'\xae#0\xec;\xe2?\xfe\x97\x15\xf1\xf4\t\xeec\xd97\xf1x\xf5v\x01\xb5*\xa1\x05\x9c\xfb\xe6\x14\xe0!\xf5\x07h\xe9x\xf3\xef\xe9!\xe0F\xeeh\x08\xf4\x19\xc9 ?\nD\x06\xc9\x15\x88\xf6)\xd4\x10\xf1\x87\x07\xb6\xf3E\xeb%\x04\xe2\x0f\xf4\xf8\xa0\xfb%\xfar\x04\xeb\x0b0\x04L\xe7\x0f\xe8z\xf8\xc7\x02\x1c\x10\xc4\x0f\xa7\x0b\x9f\x0f\xf8\x16\n\x02\xc3\xeb3\xf1h\xfd?\x01\xe4\xfc \xf4F\x04\xcf\xfc$\x05\x9f\xfcQ\xf6\x0f\xf8\'\x0f\x05\x0c\x85\xfe\xe4\x04.\xfc2\n\xb0\xfd\x96\xff\x97\xf4t\x02\xb0\x08\xc7\xfc\xd9\xf3\x99\xff]\x07*\x03\xab\x06\xfa\x06\x86\t\x04\x01\xb5\x02m\xf8.\xf4^\xf5]\xfdT\xf7\xe7\xf8\x15\x03\xd1\x02\x1c\xf9,\xf8+\xfe\xee\x00X\x07\x83\x07X\x01\xc5\xf8\xd1\xff\xe0\xe1d\x04\x1b\x1d0\x05=\x10q\x05\x15\x02=\xffn\x10s\xe5\xbe\xdf\x8c\x0f\x11\xfe\xba\x0c$\x1b\xec\x06k\x06\xbd\x08\xc6\r\xe7\x01\xa5\xf0#\xf1g\x01\xd8\xec\xcd\xd7\xb8\x03j\x19\xf8\x0c\xb1\xf3+\x0b\x98\x0e=\xff\x1d\nT\xfd\xc3\xf1$\xf25\xffi\x0c\xfb\n?\xfb\x85\xe5\xd6\xf8|\xff\x90\x0b\x1d\x0f\x97\xfe\xde\x0c\xa4\x0f\x85\x00\xc4\xfeS\x10\xcf\xe8\xbb\xdf \xect\xf9y\xfa\x04\xfe\xc9\xf8\x8d\x05\x8c\x00\x04\t\xe5\x02\x1a\x0fc\xf9\x19\xa8\xcf\n\xa0\x04\xf0\x04\x15\x0b\x95\x0f\xb5\x17\x93\xff\xb5"t\x0fU\xf39\xf7g\xe2\xea\xf1\xc3%\\\xf7u\x0c*\n\xfe\x07\xb2\x08\xe6\x037\xfa|\xf0\xb9\xfd\x03\xf54\x1e\xac\x13\x94\xf3\x85\xdcc\xfe\x9f\xfb\xae\xfd\xf5\xe7\xd8\xd80\xf7!\xe7\xf5\x14z\x19\x95\x1a\xf1\x06\xa9\xf5\xa2\'\xcf\rO\xddt\xe2\r\xec\x99\xf3\xe3\xf0\xc4\x0e-\x06u\xeb\xb7\x08\xce\x02p\x0e\x84\x16!\xe3\x10\xe3 \xf1\xb6\xf7\xe5\x07e\xed\xe3\xfd\xbe\xfb9\xfb\xe1\x0b\x18\r\x19\ts\xfd\xa4\xf5\x84\xfc\t\x01\xb9\xff\r"\xe1\x15\xdf\x01\xd4\xf8\xc6\xf7\x05\xf9q\xfa\xb5\xfbg\n\x0b\x07\xfc\n\xa4\x0e\xf8\xfb\x8d\xfb\xa3\xf1\xb2\xfd\xb3\xf8\xcb\x0cm\t\x9b\x13E\x0e\xad\x00\xe1\x0c\x8f\xfa\x1b\x0b^\xf9F\xfdb\x01\xce\xf1G\x03\x00\x02\xe8\x07\xf7\x18\xb3\x0f\xe9\x04\xff\xfb\xfa\x03+\xfc\xda\xed\x10\xfbN\xfb\xd4\xfe\xf4\x04r\xfa\xf8\x01\xd4\xfc\x98\xf3\xd1\x00o\xf9\x8b\n\xbf\x00\x94\xf0\xc0\x01\xbd\x02\x11\x06\x04\x05\x10\xffq\t\xc7\xfc\x86\xf6\xe4\xf71\xfck\x08f\xffM\x02\x91\xfd2\x04\xe2\x04S\xf2A\xf7c\xf7\xb3\xf6K\t\x02\x02\xf0\x03\x11\x00\x93\xfe\xab\x05\xaa\xfao\n1\x06O\xfe\x91\x00\x9e\xfdQ\n\xf7\xfe\xab\xfbB\x07L\x02\xb6\x03\xec\xf9\xd5\xfb\xcc\x03?\xff]\x02\xc2\xff\xeb\xff^\x02\xd7\xfd&\x00\x80\xfb\xb1\x00v\x05\x0f\x01u\x04N\x00\xa9\xf5\x95\xfdR\xfa\x05\xf94\xfa\xfb\xf8\x11\x02S\xff\xd3\x05m\x02\xbc\x07\xe8\x02\xec\x01\x9a\xff\x98\xff\xe0\x01\xe6\x00\x14\x03C\x04\xc0\x03\xe2\x01\x92\x02\x1f\xf7\x0b\xfcF\xfd\xa3\x04\xbb\xfdE\x03\x92\x01f\x00\x12\x04\xbe\xfc\xea\xfe\x85\xfb\xce\x02\x0c\xfe\x8f\xfc\xdc\x01\xbd\x00\x03\xf9\xd2\xf9\x02\xfeZ\x03F\x06\x0b\x01,\x01\xb1\x00\xfe\xff\xbd\xfe\n\xff@\x01&\xfd\xe9\xff\xcb\xfe\xb5\x00\xb8\x04\x99\xff\xa9\x01\xc8\xfb\x12\xfd$\x01\x01\xfdV\x01\xd0\xfe\xc5\xff\\\x04l\x02\x1a\xffN\x00\xe2\x01\xe1\xfc\xcc\xfa5\xfd\x15\xff\xe9\xf8&\xfc\xb4\x01\x98\x02Y\x00}\xfd\xa1\xff\xa9\x01\x92\xff\xe3\xfe \x00\xfd\xfe\x86\xf9A\xf9k\x00Q\xff\x0b\x01-\xff{\xffz\x03\'\x01L\x00\x07\x01)\x01\xea\x00;\x01y\x03\xf0\x02)\xff9\x00\xb3\x01\xa7\x00\x00\x02\x02\xff<\x01\x02\x04\xe5\x04\x9e\x05\xe9\x01\x89\x02R\x01f\x06\x06\x04\xab\x02\xa9\x04f\x01\x8b\x02\x88\x04\x89\x04\xaa\x04D\x03\xa6\xfe_\x01w\x02\x19\x02\xe6\x03\xe0\x04\x0b\x02G\x01\xa4\x022\x01\xba\x02\x8d\x02\\\x01\x0b\x01$\x00}\xfeY\xfd\xbd\xfdg\xfd\xbf\xfcg\xfaA\xfa\xf0\xfaX\xfd\xd6\xfe\xcb\xff[\xff\x8a\xfb\xf6\xfc\x0c\xfdO\xfc \xfc\xfc\xfa\xe6\xf9\x1f\xfb~\xfa\xc0\xfb\x07\xfeZ\xfc\x13\xfc\xc2\xfd\xa5\xff\xa7\xfeJ\xfd\\\xfe\x1d\xfe\xf5\xfb1\xfc\xd6\xfd\x8f\xfe2\xfe\xe1\xff\xa5\xff\x8f\xff\xd7\xfe}\xfe0\x01l\x00\xe0\xff\xfd\xffS\xffB\x00\t\x01\x17\x01\xd2\x02\xba\x02\x06\x02D\x01\xcd\x01\x1a\x02\xc0\x00\x1c\x00d\xff\xc6\x01\xa3\x01\xaa\x01\x8b\x02\x13\x03\xa7\x03L\x02=\x03\xda\x01\xcc\x00\xf8\xffp\xff\xce\xff\xd5\xfe\x17\x00\xc7\xff\x1d\x00\xfc\x00g\x00r\x00;\xff\xa7\xfe\xfb\xfe\x85\xff.\x00K\x00\xce\xffm\xffq\x00\xdc\x00\xfa\x00-\x02\x90\x01d\x00\x06\x01\x13\x02W\x033\x02\xab\x01\xd8\x015\x02f\x02\x8c\x02W\x02e\x01v\x00S\xff?\x01\xb8\x00D\x00o\x01\x89\x01\x04\x01\x86\x01\xda\x01n\x02\x91\x02\xd1\x01\xb7\x00\x94\xffZ\xff\x95\xffz\xff\xf5\xfeh\xff\x83\xfeR\xfeS\xfd\xe9\xfd\x91\xfe\xa5\xfdQ\xfd9\xfd\xa3\xfd\xa7\xfd\xc2\xfe\xbd\xfd0\xfd\x88\xfd\xba\xfd\x85\xfez\xfd\xba\xfc4\xfd\x83\xfd\xff\xfd\xa3\xfd\x99\xfdT\xfd\xf6\xfe>\x00#\x00\xaf\xff\x11\xfe\xe0\xfe^\xff\x07\xff\xed\xfe\x87\xfe\xa8\xfe\xa3\xff\xb5\x00\xd7\x00\x9c\x00\xb0\x00\xe8\x00$\x02\xe7\x01\xb1\x01S\x02i\x02\x0b\x026\x02\x08\x03r\x02>\x02m\x01\xe2\x00\xde\x00:\x00j\x00\x8e\x00}\x01)\x02\xe0\x01\xcb\x01}\x01\xf9\x01g\x01k\x01\xc4\x01\x15\x01S\x00\x07\x00(\x00\x10\x00\xc4\xffg\xffk\xff\xa3\xff\xf2\xff\x89\xff\x19\xff^\xffk\xff=\xff\xe6\xff\x08\x00\xd0\xff\x83\xff\xbf\xfe\x07\xff\xe8\xfe}\xfe\x7f\xfe-\xfe$\xfe4\xfek\xfe5\xfe\xb5\xfd*\xfe\x17\xfe\xb7\xfd\xd2\xfd\x07\xfe\x8f\xfe\x98\xfe\x83\xfeD\xfe\xfe\xfd3\xfeU\xfe{\xfe<\xfem\xfef\xfe\x8f\xfe\xed\xff%\x00\x97\x00)\x00d\x00\x97\x005\x01\xed\x00\x96\x01\xeb\x01\xd3\x01\xf0\x01W\x01\xa7\x01\xbc\x01\xf9\x01\xac\x01\xf6\x01C\x01\x8a\x01\x87\x01,\x02Z\x01>\x01\xec\xff\x96\x00\xa0\xffl\x00\xda\xffd\x00\xc8\xff\x8d\x00\x13\x01\x98\x01\xdf\x01\xad\x01\xc2\x01F\x01\xcb\x01\xdb\x00\x98\x02h\x00\xdf\x02\xc3\xff\x8d\x03\x9c\xfc\xa5\x06w\xfc\x87\x01E\x01\xc2\xfc\x00\x04\xb7\xfb\xfa\x02\xa7\xfd`\x03\'\xfcx\x05w\xfbH\x03~\x00q\xfd1\x04\xa0\xfd\xa8\xff\x04\x02\x1e\xfd\x9d\x02\xc5\x00\xc8\xfcz\x05v\xfb\x19\x06\xfb\xfc8\x05\xd4\xff\xbf\x01\xde\x02\xd2\xff\xbf\x02\x04\x00|\x02\t\x02\xc4\x00\x81\x01\xaa\x01v\xfe \x04\xf4\xfdz\x02\x18\x00{\xfeX\x01\x14\x00\x1f\xfe\xc2\x02\xf9\xfb\x01\x01\x90\xfe\xfd\xfc\xd8\x00D\xfb\xd0\x00t\xfb\x91\xfd\xdb\xfd\xad\xfcu\xfdt\xfe\xef\xfc~\xfe\x82\xfc)\xfdi\xffC\xfd\xfb\xfe\xa5\xfd\xc9\xfd\xc9\xfe\xcb\xfd\x01\xff\x94\xfe\xa8\xfe\xf0\xfe\xe4\xfe\x08\x00\xb0\xff\xa1\x00\x9c\xff\t\x00\x9a\x00E\x00\xf8\xff\xef\x00f\x00\x1f\x01\xdd\xffc\x00W\x01\xc3\x00\xd8\x019\x01\x13\x01\xcd\x01L\x00\xff\x01\xc0\x00\xa2\x01B\x01\xff\xfez\x01\xfd\xff\xbd\x01\xa3\xfeW\x00\xac\xff\xa1\x01\xeb\xff\x9d\xfe\x9c\x00=\x00/\xfd\x99\x01Q\xff:\x00\x0f\x00\x10\x01\xb8\xfd\xdf\xff\xdc\x00;\xff\xf2\x02\xcf\xfa\xc1\x02\xc6\xf9\xf8\n1\xcaR\xe5\x92\x1cq\x05\x06\x08\xf7\x05{\rb\xfaG\x0fJ\x0b\x80\xfa\xfe\xff\xda\xf3\x0f\xe0T\x15z\x00\xaa\xff\xac\x0f\x92\x01K\t\x90\x0c|\x05h\xe8\xb1\xfal\xff\xdf\x14I\x0b^\xfc\xdf\xe9\'\xec\xfc\t\xd7\xfcX\xfb\xbf\xed\xfd\xe1\xf7\x00W\x08\xa7"\x7f\x0f8\x0e\xa5\xf5 \x15\x96\xef\xeb\xb3\xea\x12\x82\x00\xe1\t\xe9\x01\x0e\x1c\xb8\x0c\xcd\x00\x11\x19\xa9\xf4:\xfe\xc7\x13o\xda\x11\xf2\xf0\n\xd1\xec\xe5\x18\xa6\xfa\x95\x06&\x1d\x8c\x10\xd0\xf3\xe5\xf2?\x03i\x0b\x17\x04L\xfej\xe6\x1e\xe7\xbc\x1a\xa0\x15\x98\t\x0c\x00\x83\xddO\xe7/\x07\xb9\x0b\x97\x15f\x0b\x8f\x0e\xbc\r\x01\x110\xfbm\xdc=\xee1\xf9\xd6\x02-\x06Y\x04\xc8\x0b5\x08\xbf\x07\x06\xf9\x86\x0e\xd1\xfe\xf6\xe7\xd1\xf6\x15\xf2\x9c\x08\x04\xed6\xfb\x96\x14\xa2\x0b<\x11\xd6\x02\xcc\xf2\x1b\x042\xf5\x8a\xf2>\xf8\xf9\xf0/\x17\xf3\x15\x87\x10R\x08\xce\xfd\x96\xf0\xde\xf4\x10\xf4)\xf7\x96\xf9X\x07\x19\tO\t9\x01\x0f\xec{\x05w\xf3<\x05\x06\xf6\xad\xfcL\x0c\xfe\xfe\xb6\nz\xf1m\xff\x04\x08k\xeb\xa4\xfe\xee\xfc\x01\xf6~\x0b\xea\xfey\x08n\x03\xd3\x07\xc8\xfe/\xfd\x05\x00\xd6\xf4\xc0\xfa2\xfc\t\x06B\x08 \x00\x13\xfa\xe7\x01\x15\x03\xba\xfb\xf0\xf7\xaf\x02\xca\x03"\xfd\xc2\x04\r\x02\x82\xff\xb1\r\xdb\x03\xd7\xfb\xa1\x04\xa0\x04\xd2\x01\xe2\x087\x0b\x1e\x01V\xfbl\xfcf\x02\xfd\x04-\xfb\xd5\xf4\x01\xfaD\x02\xda\t\x11\n\xe1\xff\x9a\x00H\x01\xeb\x00N\x01\xdf\x01h\xff\xa0\xf9p\x05j\x07\xa8\x03\x8c\x01\xf9\xfc\xba\xfc\x97\x00\xd6\xfe\xf4\xfel\xf8{\x02\xdc\xfc\xbe\xfem\x00\x8f\xf7\xd4\xfd\xe8\xfe\x01\xfd\x92\xf9\x96\xff\x87\xfe\t\x03\xe7\xfe\xcd\x00[\xf7\x06\xfc\xb0\xf9)\xf6\xc7\xfeR\xfa\xdc\xfeD\xff\x90\xfd8\x02\xfc\xff\xea\xfd\x94\xff\x1e\xfeL\xfd\xdd\xffA\x04\xe8\xf9\x17\x02\xf6\x00\x0c\xff\xc3\x02\xef\xfdQ\xfcE\xfb\x95\xfe\xe2\xffr\xfe\x97\x04\x84\x00@\xffT\x00;\xfa\x98\xfe\xe3\xfew\x00W\xfd\x96\xff\xbb\x00\x06\xfc\x1a\xfa1\xfd?\xfc\xc4\xfd\x96\xfc>\xfb?\x02\x85\xfe\\\x01\xc1\x01i\xfd\xfa\x01\x07\xff\xb6\xfe\xee\xfdz\xfeJ\x00"\x01\x11\x06\xf1\x02g\x00\x0e\x000\x00\xab\x01{\x03#\xfd\xa2\xfe\xe4\x02U\x03\x8e\x02\xa4\x00\x98\xff\xc5\xfe\xf6\x00\xdf\xfc\xad\xfd\xfe\x00\xf3\x01\xc0\xff\x05\x01\xe3\x01\xb9\xff*\xff\xa3\x00\x9f\x00#\xffD\xfeT\xff\xa5\x02\x03\xff1\x01\xa9\x00L\xfe\xf7\x03X\x04\xbc\x00\x9f\xfe\xc8\x00\xd8\xfe\xa2\xfe|\x01H\xff\xb9\xffK\xfd-\xfb\x9c\xfcn\xff9\xfe\xcb\xfe\xf2\x01(\xfe\x11\xfet\xfd\xf1\xfb\xc3\xff\xb3\xff\xd0\xfd\xc8\xff\x81\xff*\xff\x7f\xfdJ\xfeW\xfe\xba\xfdJ\xff\xdc\xfc\xbb\xfc\xaa\xfcK\xfd\xc4\xffm\x00\xcc\xfe\x9f\xfe\xc7\xfe\xa3\xfd\xe4\xff\xf9\x01\xdd\x00\xaf\xfe\xea\x00%\x02\x17\x01+\x00]\xfex\x00G\xffO\xfd\xde\xff}\x00S\x01\x0f\x03K\x03(\x02R\xffu\x00\xb4\xfe0\xff\xf4\x00\xb9\xfec\x00q\x01\xbb\x01x\x02R\x033\x02^\x01\xc1\x02]\x02\x06\x02\xc6\x00-\x01\x91\x026\x00\x80\x01}\x01\x19\x02\x87\x01u\x00T\x00\xcd\xff;\xff\xc8\xff\x80\x01\xed\x00\x90\x00\xb4\x00\xb2\x00i\x00\x9a\x00\xa4\x00\x1d\x01\x81\x00\xe0\x00\xd7\x00\xe2\x00\'\x01\x01\x01\xfa\xff\x8d\xff\xad\x00\xd0\x01\xe2\x00\x85\x00\xf0\x00\xe5\x00\x15\x00J\x02\x8c\x01\xff\x00`\x00_\x02%\x01O\x026\x03\xac\xff\xdf\x03m\xfc\x94\x025\xff\xea\xfc\xa7\x00*\xfd\xea\x00\xae\xff\xfe\xfd\x00\x01\x0c\x00z\xfe\xbf\x01\x11\xfd\x1c\x01\xa5\xff\xc0\xff\x92\x01{\xff,\x01\xef\xff\xe7\xfe\x8d\x00\x07\xfej\xff\xf2\xff\x02\xfd\xbc\xff8\xfd\xa0\xfc\x9e\xff\x8c\xff\xdd\xfd\xf0\xff\xca\xfd\x1e\x00\xee\xff\xdf\x00S\x00\x83\x00T\x00\t\x00\xc4\x00+\xfe\x9e\x00>\xfe\xe6\x00h\xffM\xff\xe8\xfe\xb6\xfe\xd8\xff{\x00\\\x00\xe2\x00W\x00\x1c\x00\xc1\x003\x00\xb7\x00\xee\xff\x93\x01\x96\x00z\x01\x12\x016\x00\xad\x00"\x00B\x00\xe9\xff\x06\x00\xbc\x00\xb6\x00\xf2\x01u\x00R\x01~\xff\x1c\x02\xc7\xff\x91\x00}\x01H\xffq\x01v\xff\x0c\x02\xdc\x00\xc5\x01\xe3\xffP\x02\x1e\x00J\x00\xfd\x00#\x00\x81\x00\x96\xfeb\x000\xff\x98\xff\xf2\xff\xe2\xff}\xfe\x8a\xfft\xfe&\xff\xde\xfe\xcd\xfe-\x00k\xff\xd7\xfe\r\xffs\xffC\xfe\x8f\xff\r\xff0\xfeE\xfe\x01\xfe\xea\xfd\x0e\xff\xe1\xfe\x03\xff\xbb\xfe\x16\xff\xe6\xff\x0c\x00H\x00w\xff\xc4\x01c\x00\xbc\x01\x90\x00\xe6\x00\xef\x00\n\x00\xfb\x00\x06\x00;\x00a\xff\x0e\x01\x0f\x00h\x01N\x00F\x00\xe3\xff\xda\xff>\x00\xc2\x00P\x00\xbb\x00\x80\x00\xa9\x00n\x01Y\x00\xf4\x01\x06\x00\xf8\x00\xa4\xff\xc9\xffA\x00\x84\x00\x17\x01\xd1\x00\xf5\x00\xee\x00\'\x00\xc8\x00o\x00B\x00O\x00\xc0\x00\x07\x01\xfd\xff\xeb\x00\x0e\x00\xe8\x00.\x00W\x00\x85\x00\xb8\x00\xe1\x00\xdb\x00\xad\x00\xfc\x00\x89\x00U\x00@\x006\x00\x04\x00\xf7\xffB\x00\xac\xffh\xfe1\xf8\xbb\xfc\xb8\x03L\x02\x00\x037\x05\x10\x04\x11\x06\x93\x07_\x03\xa7\x02e\x01,\xff\x1c\x013\x00\x89\x00~\x04\x89\x03U\x030\x06\x12\x04b\x00\xd8\xff\xd0\xff\xb1\x02\x8e\x01"\x00\xdd\xfe\x85\xfd\x9a\xfb7\xfdr\xfd\x85\xfd,\xfd\xda\xfaz\xfc_\xfd\n\xff\xa7\xff\xa0\x02\x8c\xff#\x00\xae\x02\xa6\xfam\xfb6\xfdM\xfaA\xff\xcd\xfe\x94\xfds\xfd\xdb\xfe\x06\xfc\x89\xff\x8b\xff\xaf\xff\x90\xfe\xd0\xfa\x0b\xfcH\x00\x10\xfa\x89\xfd\xa5\x01#\xff\xd5\x05\n\xfd&\xff\x0c\xfcw\x01\xb8\xf7.\x05\x1c\xdb\x14\xe6\x82 \xb7\x07\xf4\x07I\t\xf2\x08\xab\xff\xce\x0c\x9d\x07\x17\xfd6\xfe\xab\xfb\x03\xf4\xb5\x03\xda\x01\xe0\x026\x0f\x8f\x06\x16\x0bt\x0cS\x03\xe4\xf2u\x01\xe8\x0f\xc5\x00\xf0\x01\xb2\x06\xc3\xec\xe1\xef\xa7\x00\xbc\xfe\x14\xfcR\xf9,\xee\xd9\x01\xa1\x06\n\r\r\r\xfe\x03\x91\n+\x00\x89\n\x93\xf9\x9d\xf1\x91\xfc\x0e\xf6\x0f\xfc\xb2\x02\x1b\xfd<\xff\x9a\x01\x8f\x02\x89\x04n\n\x9c\x01O\xf7\xef\xfd\x1b\xf8$\xfd3\xf8}\xfb\x1e\ts\x03\x86\x087\xff\x08\xfb\xb4\x02h\xfbD\xf4\xc0\xf7\xe0\x05\x16\x10\xf8\x116\n3\x05.\xfb\x83\xf9\xed\xfa\xd2\xf4\x18\xf9\xcd\xfe\xab\x07\x16\x04\xe3\x00k\xf5T\xf9$\xfd\x0e\xfe\xb9\x07\x11\xfe3\x00\x05\x04\xd7\x05\x03\xfd?\xfc\xcf\xfbj\xfa\xac\xef\xf0\xf7\x9a\x01N\xfe\xec\xff@\x06z\x0cb\xfe\x0f\n\xb5\xfe]\xfa\xd1\xf7\xeb\xf0C\xf9>\xf6U\x02\xa5\x02\x03\x01\xb2\x00\x04\x00\xc6\x03\xb8\xf7l\xfa\xb1\x05\x1f\x05\x1a\x00\xdc\x02\xb0\x02\t\xff\xdb\xfe\xe9\x01\xa8\x06\xdf\x02\xee\xfc\xfb\xf7\x1e\x06\x1d\x08\xc5\x08?\nI\x03l\x08\xb7\x084\x00a\xfa\xdb\xfb\xe1\xff_\x04\xa2\x03\xfd\x01(\x00?\x01V\x03 \x01H\x01\x1a\x02\x83\xfe\xe0\xfd~\x00:\xff\xea\xfd\x18\xfd&\xfe\xcf\x03t\x03\xdf\xfdh\xfc\x03\xffO\xfb\xe3\xfbq\xfb\xfc\xf9"\x03\xdb\x03D\x02\xa9\x01\x92\xff\xd1\x00+\xfe6\xff\x8a\xfc\xf0\xf5\x92\xfe\xfa\xfdU\xfb\xba\xfb\xb3\xf8\xc0\xfd\xf5\xfc\xce\xff\xc7\x00\xcc\xffR\x01\xc0\xfe4\x01\x12\xff\xe9\xfdw\x00\x94\x00\xae\x02(\x01+\xfe`\x00C\xff\x80\xff\xb9\xff\x1d\xffE\x01\xd7\x01G\x03\xc8\xff\x11\x017\x01F\xff\x1b\x01\xe2\x01U\x00\x1a\xffq\xff\xee\xfe\xf5\xfd\xe7\xfch\xfe\xe5\xfe\xe0\x00\x14\x01\x83\x01!\x03\t\x02v\x02[\x02\x0e\x005\xff\x18\xfe\xfd\xff1\x00\xbc\xff\x83\x00\xd2\xfff\x01x\x01\xb0\x00%\xff\x17\xff\xac\x01\'\x02\xed\xffB\x00\xa2\x01T\x01B\xff%\xff\xb9\xfdq\xfd\xc2\xfd\x12\xfdd\xfe\xc8\xffl\x01\x0c\x01\xae\x00 \x01y\x00s\xff\xe4\x00g\x00*\xff\xb6\xff\x84\xff\\\xff1\x01*\x00e\xff\x14\x00j\x01\x87\x03@\x01\x10\x00\xf9\xff1\xff\xda\x00`\x01\xb5\xff\x8c\xff\x9d\x00\x99\xff\r\x00\x9a\x01D\x00\x14\x01\xf1\x00 \x01}\x00\xd6\xfeP\x00K\x02!\x01\x18\x02\xbd\x026\x02\x8b\x01;\xff\xf7\xff\xcc\xfe\xb6\xff\x03\x01\xf5\xfff\xff>\xff\xee\xff\xdb\x00\xa1\x00@\xff\x02\x00?\xffA\xf3\xd8\xf4,\x05q\x04s\x00s\x02d\x01\xe4\x00\xaa\x01`\xffP\xfd\x1a\xfc\xe8\xfa\x06\xfc\xfd\xfc\xc0\xfd\xa9\x01\xeb\x03\x86\x02\x10\x05\x0e\x05\\\xfe\x83\xfc\x88\x01\xa3\x04\xeb\xff\x82\xfes\x01\x98\xfd;\xfbN\xfe{\x01d\x01\xdb\xfd\xa6\xfd\xd6\xffp\x03\xec\x05x\x05\xc1\x05r\x047\x03\x07\x03\x15\x00\xb3\xfd\xbe\xfd\x8c\xfd\x0c\x01\x88\x01r\x00\x0f\x01k\x01_\x02\xe6\x01\x91\x01m\xfe\x8f\xfb\x83\xfb>\xfa\xcf\xfa\xf4\xfac\xfb\xeb\xffp\x00u\xff\x08\xfd\x8a\xfc\xf9\xfe\xca\xfd\xef\xfa\x92\xfb\xec\x00\xdb\x04\xa4\x04\x91\x03\'\x02\xfc\xfd_\xfd\x1a\xfe\x13\xfd6\xfd\xe8\xfe\\\x01\x08\x01d\xfeB\xfd\x8f\xfc\xd2\xfc\xb5\xfe\xef\xff\x11\xfe\xa2\xfe\x87\x01_\x02u\x00\x1e\xfe\xfd\xfel\xfe\x86\xffU\x00\xc1\xff\x87\x00d\x01\x9a\x02\xfe\x01\xc9\x01\x18\x024\x00*\xff\xe1\xfd\xef\xfcU\xfe\xb5\xffB\x01\x14\x02\x01\x01\x83\x00\x88\x01w\x00H\x00\x13\x01\x9a\x01\x1f\x02#\x02X\x03\xb8\x02%\x02\r\x02\xe8\x01\x9b\x01\x01\x02\r\x00>\xff2\x02y\x01\xa2\x00<\x00\xcf\x00n\x01\x96\x02\x03\x01\x06\xfel\xfe\xf1\xff\x03\x01\r\x001\xff\xb6\xff\xba\xff\xe4\xfe\xf5\xff\xbd\xff\xc1\xfea\xfe\xa8\xffx\x01\xc1\x00V\x00\xe6\xffc\xff;\xff\xc9\xfeX\xff\xaa\xff\xb8\xff\x00\xffA\xff$\x00#\xff\xa7\xff\xe2\x00\xb5\xff\x96\xffR\x00)\x01\xd4\x01*\x01!\x00H\xff\xe6\xff\xe3\xff(\x00\x92\xff@\xff\x9a\xff\x0b\x00 \x00\xe7\x00,\x02r\x01\x83\x00\x01\x01h\x00U\xff\x8d\x00\x97\x00\xe0\x00\x1e\x00\xa9\xfe\x9d\xfe\xd1\xfe1\xfe\xf7\xfd\x0f\xfek\xfe\xaf\xff:\x00\xe5\xff\x87\xfe\x89\xff\xcb\xfe\x82\xff\x89\xfc\xbe\xf3+\xfc\xf3\x03\xc9\x00\x0e\x00i\x00\x1a\x01\xee\x00\xe2\x00\xc6\xfea\xfd\xaf\xfdm\xfd3\xfe\x87\xfd\xb9\xfe|\x01\x8d\x01R\x018\x03\xfe\x01\x8c\xfd.\xfe\xb7\x03\xdb\x01\x92\xfd\xd1\xff\x8f\xfe#\xfc9\xfc\x0c\xff\x1b\x01\x08\x00\x99\xfc\xee\xfee\x02%\x03P\x04>\x04\xc3\x04\x80\x03\x9d\x02\x85\x03v\xffE\xfd\xcb\xff\xbf\xfd\x18\x02\xce\xff\x1b\x00\xa6\x02\xa3\x00\x13\x03\x8d\x012\x03\xc9\xfd-\xfe\xca\xfb\xdc\xfd:\xfe\x10\xfc\xbb\xff\xad\x00\xd2\x02G\x00\xda\xfe\x8c\xfe4\x00\xae\xfc\xa1\xfc\xf4\xfc\xa8\x02\x1d\x02;\x04\xff\x00\xd3\x00\x91\xfbV\xfd\x86\xfbD\xfdi\xfd\x9b\xff\xdb\xff\xa3\xfe\x80\xfe=\xfa\xfc\x05\x1d\xc6~\xf9;\x19>\xfb\x86\x0fJ\x05a\t\xf7\x05\xe5\x08g\x00I\x00\xf7\xf4E\x00\x83\x01Q\xf3"\x06\xaf\x0bp\t\xc9\x07\x91\x0c\xac\x06B\xf2\t\xfb[\x14n\x02\xfe\xf3\x9f\n\xfa\x00\x94\xf1\xd8\xed\x01\x00\xdb\x04\x9a\xf7\x12\xf1X\xfb\xdc\x06b\x06\xac\x11\xcb\x07\xba\x11\xa3\x01\xdc\x01G\x0b\x1b\xf1\x08\xfc.\xf6]\xf6\x8b\x04\x06\xf8\x1b\x00\xb9\x03\x03\x04\x1a\x04\xbb\xff^\x05w\xf9\xd9\xfaL\xf6\xcb\xf3\xc4\xfd\x9c\xfaq\x03)\x05\xb1\x088\x07/\xf9Y\x00\x11\x04\xa7\xfa\xc5\xf3~\xfd\xf6\n\xe4\x0fd\x0f4\x0b\xc3\x02\x99\xfb\xc0\xf9\xa5\xf9$\xfc\xbb\xfb\xe0\t8\x03\xdd\xfe\x90\xfd9\xfa0\x03/\xfb5\t\x8d\x001\xff3\x03T\x04\xfe\x04,\xfbu\xfc\xc5\xfc\xa6\xfeU\xfd@\xfe\x1a\xf9\xd8\x01\xe4\xfe\x80\x06\xaa\xff\xce\x00\xbc\x05\xf3\xfa\xba\xfa\x01\xf8\x94\xfd\x12\xfc{\xffg\x00$\x01\xeb\xfc0\xffq\xfd\x9f\xf9\x89\xfe\x85\x00]\xff\xaa\x00\xaf\x04\x0c\x04\xa0\x00\xd2\x01\xb5\x03\xae\xff\'\x01\x1f\x02V\xfd\xa5\xff\xcc\x00\xf0\xfe\xc5\x01\xed\xfe\xc4\xfe\xf5\x02\x8a\x02R\xfc\xc1\xfb\xf9\xfc]\x00{\x03\xc0\xfd)\xfe\xbc\x01\xe1\xff>\x00p\x01P\xfe\x8d\xfd\'\xff\xa3\x00\x96\x02.\x00\x83\x00e\xff\xde\xfc\xf6\xff\xbf\xff\x8e\xff{\x00\r\xfe\xb2\xfb\xc1\xff\xc2\xfd%\xfc\xc6\x00\x81\xfe\xe0\xfd\xfa\xff\xf7\x00\x00\x04\xf6\x02\x0c\x02s\xffG\xfe\xc3\x00\xe2\xfds\x00\x9b\xfe\xb0\xfe\xe3\x00K\x00=\x02x\x02\x18\x04O\x02*\x00\xa1\x00\xcf\x00\xd5\x01J\x03*\x03\xc4\x02=\x00\xe6\x00\xcc\xffg\xfe\x86\xfd\x18\xfe\xee\xff\x12\x01J\x04\x80\x02\xa7\x01\x88\x02c\x01\x88\x01\x18\x02\x14\x01\xab\xff\x9e\xfd\xe9\xfe\x8d\xfe\xbc\xfc_\xfd\xe4\xfd\x02\xff\x0e\xfe\x91\xfe\xa2\xff\xa3\xfe\xd3\xff\x81\x01d\xff\x07\xfem\xfea\xfck\xfd\xa3\xff*\x00F\x00\x10\x00\xf3\xff|\xff\xc7\xfe\xa8\xfe\xaf\x00\xb3\x015\xff\x9d\xff4\x01\x15\x01\xe5\xfeW\xfef\xffy\xfd\xda\xfd\xa3\xfd7\xfe\xec\xfeY\xffw\xfeU\xff\x00\x01=\x01\x13\x00#\x01\xa2\x02\xc0\x00Y\x01\xd8\x01\xae\x02\xf1\x02\x82\x02\xf6\x01\xc6\x019\x01\xac\x03\xee\x01Z\x01\x12\x02W\x02\x91\x02\x92\x01\xf9\x00\x17\x01\xe2\x02U\x01\x9d\x00\x12\x01\x06\x01\xc2\xffz\x00\xe0\xfe\xe9\xff\xde\xff\xe0\xff\xce\x02\x99\x01\xaf\xff\xe8\x00\x88\x02C\x01G\x01\xf1\x00(\x01\xbe\x00\xf6\xff\xdd\xff\x95\xff4\xff@\x00R\x00\xa1\x01\x95\xff@\xff_\xff\x87\xfe\xe6\x00\xe3\x01\xa8\x01\x80\xff^\xffY\xff!\x00\x90\xfeo\xffl\xfe\x06\xff\x18\xfd~\xfe\xa0\xfe\xa1\xff6\x01\x0c\x022\x01\xcd\xffP\x00$\xfef\xffI\xfe\xdb\xfeo\xfe\x9e\xff\x97\xfd%\x01i\xfd>\x00\xd7\xfd\x13\x01M\xfd\x00\x02\xe7\xfcP\x01\xa8\xfc\xb2\x00\x98\xff\x99\xccj\x05\x83\x0e\xcc\x01\x1b\x0c\x12\x01r\x05x\x04\x17\x06\xa3\x048\x00\x04\xf3\x18\x06\xcf\xfc\xa1\xf7\xa7\x0b\x80\x07\xdb\x06\x04\x04\xb9\x05\xa5\xff\xbe\xf4\xa8\x01\x05\x13O\xfc\xd9\xf8\xa0\x08\xb9\xfa\xae\xf0?\xf2\x89\x08\x93\x01\xc6\xf2h\xf3|\x01\xd8\x03W\r\xf9\x0eS\x07\xa9\x0ea\xfaD\x052\x02\x19\xf2i\xfb\x06\xf5\xc0\xfd\x01\x04\x12\xfa\xb6\x04\xdc\x03\xa3\x03v\xff\xcb\x00Q\x03T\xfa6\xfe\xfe\xf2F\xf7\x88\x00?\xfe\x80\x05\xfd\x01\x15\x06/\x06]\xf8\xc7\x01\xd6\xff\x9b\xf6;\xf6\x1e\x00\xec\x0ek\x0c\xb2\r\xf3\x07/\xfd\xbf\xf9\x8a\xf8^\xfbz\xf8\x18\xffn\t\x0c\x00\xd8\xfe\xb6\xf8\xfd\xfa\x0b\xfe\xc8\xfb\x97\x05\x98\xfc\xc8\xfe\xe0\x00%\x03\r\x02)\xfc$\xfdw\xfe@\xfdB\xfe\x82\xfd\xfd\xfb4\x01\xc1\x00\xe4\x06\xaf\xff\xaf\x03-\x03 \xfc\xa9\xfa\xaa\xf9:\xfdh\xfb\xd2\xfep\x00\x1c\x00k\xff\xa3\x02\xd1\xfd\x13\xfd\xef\xffv\x047\x01\x90\x02\x02\x06\xfc\x02\x15\x02S\x04-\x06\xe3\x02>\x07\xcd\x03v\x01g\x02\xb1\x02g\x00\xa6\x05\xc0\xfe0\x02\x9d\x03\xc7\x00\x05\x00/\xffm\x00\xba\x03L\x05\xb2\xfd\x8d\x01\x07\xff0\x04\x99\xfd~\nv\xe2\x8f\xe9L\x14 \x05u\r\x8b\x07\x1c\x07\xef\x05\x18\x05\x9e\x02A\x03\x92\xfa3\x00i\x068\xf3\xa8\xfc\x8b\x06W\x02\xea\x05\x96\x03\n\x06\xa3\xf6\xbe\xf9h\x12\xa8\x06\xb0\xf5q\x00i\x01\xde\xf1\xb3\xea\xe3\xf6q\x02d\xf9\xf6\xf1,\xf8\xd5\x05H\xff&\x0b\x9f\x03~\x07)\x04\x9e\xf8Q\t\xb0\xf8?\xfc0\xfa\xf2\xf3\xaa\xfe{\xf5?\xf6\x87\xfe\xce\xfbc\x00\x03\xfe\xe4\x04\x94\xfe\xd7\xf8\xe7\xfbn\xf48\xfem\xfej\xff\xb2\x00,\x04\xc5\x05\xbc\xfa\xfb\xfcn\x01\x02\xfc\x9e\xf5\r\xfay\x07\x08\x0cd\ny\x0cm\x07n\xfdt\xfb\xf0\xf9\xee\xfc\xd5\xfbZ\x06\xa4\x06\x1b\x00\xdf\xff7\xfc\xec\x03*\xfdg\x04a\x04\xfd\xff\x07\x03r\x06A\x08\xbb\x01\x1c\xfe+\x00\xe3\x01\'\xfeu\xfd9\xfa\x0c\xff\n\x01T\x05m\x01$\x00\xc7\x05\xa3\xff\x9c\xfa\r\xfa\xb0\xfe\xd6\xfd)\xfd,\x02\x10\x012\xff\xf4\xff\'\xff$\xfcx\xfd\x9a\x02\xb0\xff\x7f\x00\x13\x04\x08\x03\xdb\x01\x80\x00\xf3\x022\x02\x1e\x00V\x03?\xfe$\xff\x16\x00\xe9\xfd\xfa\x00\xd9\xfd\x08\xfe\xe9\x00\x15\x00\x06\xfeF\xfc\xbc\xfaK\xff\x06\x03\x92\xfe\xf1\xfcR\xff\xc3\xff\r\xfel\xfe\xb5\xfd{\xfa[\xfd\x8f\xfe\x01\x01F\x01\xdf\xfdO\xfe0\xfc\x1a\xfe\x9b\x00\x96\x01m\x01\x8f\xffA\xfd\t\x00\xdd\xffa\xfc\xc8\xff_\xff\x1b\xfe\xfb\xfeg\x00\\\x03o\x04\xd9\x04\xcb\x03#\x01X\x027\x00%\x00\xd5\x00U\xff\xdc\x00z\x01\xd3\x01\xaa\x02\xdd\x03e\x02\xff\x00\x9e\x01@\x02}\x02\xf3\x044\x04\xc9\x03\xb7\x02\xaa\x01\xfe\x02\x1c\x01\xa2\x00\x81\x00\xc2\x01\xa4\x01*\x03\x9b\x03\'\x02|\x03\xe4\x02\xbd\x02\xf5\x02\x03\x02\xb5\x00\x1a\xff\xa9\xfe\xab\xff\xde\xfd?\xfd\xa0\xfd\xc5\xfdO\xfdX\xfd\xa9\xfe\xf7\xfc\x85\xfe\xad\xff?\xfe\xf6\xfdC\xfe\x98\xfb\xdc\xfc\xb1\xfe\xb8\xfe\x81\xffV\xfe\xa2\x00w\xfe\xa9\xfd\xdd\xfd\x10\xfe \xfe\x04\xfd\'\xfdH\xfe\x14\xff\xa6\xfc\x81\xfc\xd5\xfd\xd6\xfce\xfd(\xfdA\xfd\x93\xfd"\xfe\x08\xff\x1f\xfd[\xff\xa0\xff\xb8\xff\x96\xffZ\x02X\xffq\x00\xf6\x00\xc3\x01W\x01H\x01q\x00\x8b\x00@\xff\x06\x01\xa5\x01\xd8\xfeO\x02\x08\xfd\xb6\x07b\xe0\xaa\xf4\x91\x10\x05\x00x\x0e[\x01\xee\x05\x81\x05l\x02@\x04\x94\x01\xa2\xf5I\x04\xab\x00V\xf7\x06\t\x0e\x05i\x05>\x031\x04%\x00\xb4\xf8\xa9\xff\xbf\x0fB\xffG\xf7\xe6\x04#\xfe#\xf5\xfc\xef\xd1\x03>\x05\x07\xf3\x9d\xf2\xdc\xfd\xff\x007\x07$\x0c\x83\x06\xa8\x0bR\xfd\xa4\x00.\x05\xea\xf5]\xfc\xb5\xf9<\xfb\xbf\x03\x80\xfcn\x01\xad\x06\xcd\x05\x08\x04\t\x01\xd1\x05\xb9\x00m\xff\xcd\xf9"\xf8w\x01\x83\x00C\x03\xbd\x03\xca\x04\x9c\x06\x9e\xfd\xe9\xfe\xfd\x01\'\xfcU\xfa\xa4\xfe\xbb\x0b\x85\x0c\x1e\x0c\xa8\x08\xdc\xfe\xb8\xfd\xd0\xfa\x81\xfcg\xfbU\xfd\xff\x06\xdc\xff!\xff\x9f\xfc\n\xfbA\xff\xf4\xfcc\x03\t\xff\x06\x00\xf8\xff|\x02\xf8\x02\x95\xff\x01\xfe|\xfd\xfc\xfd\xe6\xfc\\\xfc\x1d\xfb\x1a\xffw\xffh\x04\xff\xff\x10\x02\xe1\x02Z\xfd\x94\xf9\xce\xfa\xc7\xfe4\xfd\x19\xfe\xb1\xff\xdd\x00n\xfe\x9e\xff4\xfeh\xfc=\xfek\x01\xfd\xfe\xdf\x00L\x03\xa8\x01J\x019\x02\x83\x05\x81\x03F\x04\xa5\x05\xb6\x011\x03d\x03E\x036\x06\xe9\x02\x99\x02\x8e\x05F\x04\xc5\x01\x1c\x01\x8e\x00\xd3\x03\x95\x04\x9f\x00\xf3\x00\xab\x01\xff\x00m\x01s\x00W\xffk\xff\x15\x00\x1e\x01\x9a\x01U\x00\x81\xff\xeb\xfc\xba\xfcn\xfe\xb2\xfey\xffB\xffv\xfd\xa6\xfc"\xfe\xe1\xfb\x97\xfb\xc8\xfd\xa4\xfc\x03\xfc\x80\xfd\xed\xfd\xd5\xff\x07\xff\x03\xff\xb0\xfcl\xfc\xd4\xfd\xa4\xfc\xef\xfc\xf2\xfc\x05\xfcz\xffD\xfe-\x00\'\x00q\x00\x8e\x00\xae\xfeW\xffS\xffA\x01\x89\xff\xc3\x03q\x00\x92\x022\xfd?\x04\xa9\xfa|\x07\xd3\xed\x8a\xe0!\x15\x9b\x05\x03\n\x05\x07|\x04\x0b\n\x17\x07G\x05\x9d\x04\xc3\xf9\x08\xfd\xd1\n\xa0\xf4y\xfa\xf2\x06\xfd\x05\x02\x04>\x03\xb9\x06\xee\xf9J\xf8\xa6\x0e)\x07@\xf2\xe5\xff\x02\x04\x05\xf8\xce\xecZ\xf5T\x08\x14\xff\xe6\xf3_\xfbN\x05Q\xff\t\x07d\x05\xb5\x0b\x8c\x07G\xfb\xe4\n`\xffp\xfbd\xfcm\xf7\xaf\xff\xc4\xfaR\xfaV\x03\x9e\xff\x15\x02\xfd\xfeY\x02\xaf\x01\xdb\xfa\x97\xfa\x9f\xf3\xe6\xfb\xca\xfd\xa4\xfc\x01\x01\xed\x02l\x04\xbc\xfd\x08\xfe\r\x02K\xfd\x99\xf8\xed\xf9B\x02\x80\x08\xb5\x08\xd4\x08Q\x03\xf9\xfcs\xfb\xef\xf9V\xfe\xf0\xfa1\x03C\x04z\xfc\xf4\xfd|\xf9\xc8\x02\xbf\xfd]\x01\xf9\x03\xaf\xfeu\x00`\x03\x06\x057\x01\x1b\x00i\xff\x05\x03\xb1\xff\xb7\xfe\xc2\xfb;\xff]\x00*\x05\x8f\x03\xbb\x01\xc4\x04\x9d\xfft\xfb\x00\xf9\x17\x00K\x00\xe0\xfe\xa8\x00w\x01\xd6\xfeO\x00\x97\xfe\xf1\xfbV\xfc\xa8\xff\xed\xfd\xa0\xfev\x02\xd7\x00i\x01e\x00\xc6\x03\x14\x03\x02\xff\x01\x03|\xff\xfd\xfe?\x00\x85\xfe\xb4\x01\xa5\x00\x10\xff\x07\x02\x85\x02\xcd\xfe\x81\xfff\xfcB\x01\xf4\x00\x9e\x01\xd6\xfc\xa1\x02\xb8\xfe\xc1\x05\xb8\xf6\x83\xe8#\x0bA\x00\xd1\x05\xa7\x04\x9a\x02\x7f\x06\xc5\xff\xca\x01\x92\x02\xe9\xf8v\x01S\x06\xf0\xf5\xad\xfc\x07\x03]\x03\xdb\xfc\xdf\xfe*\xffu\xf9b\xfck\x06S\x00X\xf9R\x02\xfb\x02\xbb\xf9\x83\xf2\xdc\xf7n\x07G\xfc\x8a\xf6\x94\xfa\xfe\xfa\xbd\x05\xe2\x06F\tu\tH\x02\x04\xff\x8d\x05W\xff\x8c\xffo\xfe\x07\xfe\xb0\x02 \xfc\xc8\xffT\x03\xdc\x00\xe9\xff\x98\xfeb\x01\x04\x00\'\xff\xc6\xffW\xf9[\xfc?\x01\xa6\x01*\x00\x1f\xff\x8a\x00a\xff|\xfb6\xfc\xea\xfb\xc5\xfa5\xfd\xfd\x03\x9d\x07\xef\x08>\x06\xd9\xff\x03\x01\xf8\xfb_\xfa.\xfe\xd6\xfb\xe8\x02\xea\x00\xb1\xfe?\x00\x8b\xfd\x9a\x02|\xff\xf0\x01j\x00z\xffW\x00U\x00\x97\x02\xd8\x02\xae\x02m\x00\xcf\x01\x00\x01\x9e\xfe\x9c\xfc\x8f\xff1\xff\xf9\x00\x0c\x01\x0b\x02\n\x04\x07\x02\xac\xfe\xf1\xfb\x9a\xfe\xaa\xfe\xee\xfe\xfb\xfe\xf3\x00\xcb\x01$\xfe\xf6\xfd2\xff\x1e\xffh\x01o\x01r\x02\xbb\x02\xd4\x01\xb1\x01\xdd\x00\x92\x02,\x02\xf7\xffp\x02\x93\x02\r\x01\x02\x01R\xff\xfc\x01\x85\x01\xe8\xff5\x02\xa9\x03\'\x01D\x00\x9e\x00\xa7\xff\xd3\x00R\x00\xdd\x00&\x02\xfd\x00\xc4\xff\xf9\x01\xb9\x00\x8d\xff\x91\x01q\x01\x11\x02\xd0\x01K\x02\x1d\x00\x02\xfdm\xfe\xae\xfe\xa4\x008\x02\x8f\x00\xca\xfe\xa9\xff\xbd\xfd\xa3\xfb\x12\xffU\xff\xd5\xfd\n\xfe\x11\xfd)\xfe\xd1\xff\xd5\xfe}\x00\xfd\xff\xbe\xff5\xffy\xff\xe5\xfeW\xfe\xce\xff\xde\xfe\x93\x00\xb2\x02\x04\x03\x80\x02\x16\x02\x7f\x00\xba\xff\xa3\xff\x1c\x01\xc4\x01\x05\x01\x15\x00"\x00\x86\xfeB\xfd\xd7\xfd+\xfe\x94\xff\x18\xff4\x00h\x00\xd9\xff%\x00*\x00\x1d\x00\xfb\xff_\xff\xd5\xfeJ\xfes\xfe4\xff4\xfe\x89\xffD\x00r\x00n\x00\xe0\xff\xf8\xff\xfb\xfd&\xfe\x98\x00#\x01\xf6\xff;\x01]\x01\x1a\x00\x99\x00\xde\x00\x03\x02$\x00M\x00\x91\x02k\x02\xd5\x02g\x03b\x03=\x01\xa1\xff\xf3\x00\xf5\x00W\xffZ\xff\x05\xffe\xfe\x82\xfe\xa4\xfe\xc2\xfe\xd2\xfe\x05\xff\xf8\xfd\x81\xfd"\xffB\xff\xb8\xfe\xf1\xfe\x9a\xfe\xea\xfe7\xffK\x00\xf5\x00|\x00\x0f\x00\xcf\xff\x18\x00V\x00\xe5\x00\x08\x00B\xff)\xff\x82\xff[\x00X\xff\x9e\xfeU\xfe\xd9\xfdM\xfe\x04\xffJ\xff|\xffJ\xffC\xff\xa0\xfe\x08\xfe8\xfe\xd3\xfeP\x00W\xff\xec\xfd\x1f\xff&\x01\xa8\x01D\x01\x89\x00\xa6\xffV\x00\x8a\x00\xaa\x00\xea\xff\xdc\xfe\xf7\xff\xe5\x00+\x01\x12\x00k\xff\xda\xff7\xffB\xff\xbc\xff\x0f\x00/\x00\x8f\x00\xed\x00\xc1\x00\x84\x00\x80\x00l\x00\xa9\x002\x00\x91\xff*\x00F\x00\xe1\x00C\x01\xbb\x00\x81\x00\t\x01\xb6\x00\xcd\x00\xab\x00 \x00\x17\x00\x97\xffR\xff2\xff\xf2\xfeL\xff\x8e\xff\xe5\xfe\xd9\xfeJ\xff\xa3\xff\xb8\xff>\x00\xc2\xffr\x00?\xfed\xfe\x08\x02\xc5\x00\xd3\x00X\x00L\xff\xf9\xff\xb8\xfe#\xfe\xe3\x00\x8a\x00V\x01\xd1\x01\xbd\xff\x1c\x01M\x01\xc4\x00\xd8\x00g\x00.\x00\xdb\xff\xc6\xfeY\xffE\x00\x14\x00V\x01K\x01\n\x00\'\xfe<\xfe\x16\x01L\x00\xb0\xfd\xb5\xfe8\x00i\xff\xb8\xfe,\xff\xbd\x01\x93\x00J\xfef\xff\xc1\xff\xbf\xfe\xc8\xffK\x00\xf7\xff\xa5\xffU\xff\xf3\x00\x06\x00\xd6\xfe,\xff\xa7\xfe[\xfe,\xff\x11\xff\xe5\xff\xd3\x00\x19\x02\xb5\x01\xdc\x01\xbc\x00\x9a\x01<\xffR\xfeE\xfd\x8a\xfa\xc1\xfe\xb1\x00\xf6\x01\x96\xf9X\x00\x1d\x05\xc0\x00\x13\x02\xba\xff\x15\x00\x88\x00\x92\x01t\x01\x8f\xff\xa9\xfd\x8d\x02\x94\xff\xdf\xfc\xd8\x00C\x01\xe0\x01e\x03\x1f\x04M\x00\xce\xff\x01\x05\x91\x04\xa7\xfd\x83\xfe\x82\x030\x01F\xfc\x96\xfc\x92\x01\xe3\x00\xac\x00\xb6\x01\xb8\x03<\x03\n\x01\x91\x03\x19\x03C\x03\xdb\xff$\x00\xd6\x01\'\x00v\xfe\xcc\xfd\xcd\xffD\x01W\xff\xae\x00\xa2\x00[\xfa\x9e\xfeE\x01\xec\x00>\xff\xf2\xfe\x86\xff\x00\xfe\x96\xfe\xba\xfd\xa1\xfe\xbb\xff\xe1\x00m\xfe\xb0\xfc\xeb\xffy\xfd\x0f\xfe\x0e\x02\xbf\x01\xc5\x024\x02O\x03c\x02E\xfe"\xff8\xff\xd4\xfd`\xfe{\xfd\xa4\x00X\x01\x1b\x00\xc9\xff\x14\x00\x96\x00\xa1\xff\xdc\xff3\x01>\x02y\xfe\xad\x006\x02\x13\x00\xda\xfc>\xfcl\x00\\\x01\xff\xfd\x89\xfe\x1a\x02\xbc\x02\xc4\x03\x18\x02\x08\x03\x19\x01\xa5\xfco\xfd\xd3\xff[\x005\x00\xeb\x00n\x01\xe8\x00\xf6\xff\xbc\x00i\x00r\x00\x11\x00\x92\xff\xa2\x00\x0c\x03\xd4\x03\xdc\x01\xb7\x00w\x00|\x00>\xff\xa4\x00\xcf\x00\x85\xff\xaa\x00\x88\x006\xff\xfd\xfcx\xfd\xd8\xff\x18\x00\x01\x00$\x00\xec\xfe\xe9\xfe\xdd\xff-\xff\xf0\xfe\xe7\xfe\x0f\xffz\xff\xcc\xfe+\xfe\xc4\xfb\xfc\xfd\xdf\x00\xe1\xffL\x00\xdf\x00%\x01\xa3\xff\xe9\xfe<\x00\xd0\xff\xde\xff\x95\x00\xcf\xfe\x84\xfeW\x00\xed\xff}\xff\xb2\x00[\x01j\x00\xc2\xff\xfc\x00N\x00\xf9\xfd\x89\xfe\xe3\xffa\xff9\xfe\xcd\xfen\x00\xd5\xfe\xa2\xfd(\xfen\xfeD\xff\xdd\xff-\x00\xe4\xfe=\xfeF\xff\xc5\xff\x9c\xff[\x00\x85\x00\x8c\xff~\xff\xac\xff\xdf\xff\xd9\xff\xc7\x00\x99\x00\xe4\xff\xce\x00\xf2\x01\xec\x01 \x01N\x00\xfd\xff\xd0\x00\xf8\x01\xde\x01c\x00\xd4\xffK\x00d\x00\x9d\xff\x14\xff\xd7\xfeo\xff:\x00\x88\x01\xff\x01:\x01\xfc\x00\xfe\x00\xaf\x00u\x00c\x00\xc0\xff$\x00\x02\x00F\xffA\xff\xe2\xff\xc7\x00_\x00\xe6\xffk\x00\x1e\x00j\x00\x8d\x00~\x005\x00\xc3\xff\xbd\xff\xd9\xfe\x11\xfe\xba\xfd\xea\xfe>\xff\xf7\xfe\xf1\xffC\x00\x0e\x00\xb8\x008\x00J\xff\x01\xff\x9b\xff\xe2\x00\x94\x00%\x00\x06\x00m\xff\x84\xff\xdc\xff\xa2\xffs\xffY\x00\x1a\x01"\x00\xaa\xff\xd5\xffU\xff\xb1\xff\'\x00t\x00\xbe\x00\x8b\x00\r\x00G\x00\xa7\x00\x1e\x00N\x00h\x00m\x00\xbe\xff\xe2\xff\xa5\x00\xf5\x00\xd6\x00b\x00\x8b\x00\xff\xffE\xff\xcc\xfeo\xff\xf9\xff\x8d\x00\x99\x00o\x00<\xff]\xff\xe4\xff\xac\xffP\xff_\xff\xdf\xff\xb8\xff\xca\xfe\x92\xffO\x02\xcf\x00\x11\x01(\x00\xb7\x00o\xfe@\xfd\x1d\x02\xf1\x00\x1b\x01u\x01,\x01z\x00@\x00\x9b\x01\\\x01M\xff\x83\x00\xb8\x00s\xfe{\x00\xd1\x01\xb2\x00O\x00\xcc\x00\xe2\x00J\xff\x1a\xfe\xc4\x00)\x01\xae\xfe\x88\xff\xb6\x00\x87\xff,\xff\xed\xffK\x01\xec\xffo\xfe\x9d\xfeF\xfe:\xff\xd2\xff\xe2\xff\x04\x00\x96\xff?\xffK\x00\xb3\xff3\xff\xc4\xfe\xbf\xfed\xff\x04\xff>\xff\xc6\xff\xba\xff\xc2\xffp\xffX\xff\x95\xff#\xff\xcd\xff0\xff7\xff\x1f\x00&\x00h\xffN\xff\xa0\x00p\x01\xe3\xff\xb9\xfe\xa3\xffd\xff\xd7\xfe%\x00\x00\x01\xdf\x00\x80\x00\x85\xff\x82\xffV\xfe\xec\xfd\xba\xfei\xfe\xbb\xffi\xff\xe1\xfe\xef\xfe\xc9\xfe\xb1\xfe\xa7\xfd\xf6\xfe\x8e\xff\r\xff\xb7\xfe\xf4\xfe\xca\xff\xb4\xff}\xff\n\x00&\x00\xc7\xff\x86\xff\xeb\xfe\xb3\xff\x00\x00\x8f\x00\xa7\x00"\x01\x19\x02\x8d\x01\x16\x01\xe2\x00q\x00\xdb\xffU\x00\xd3\x00^\x003\x00\xcd\x00\xc2\x004\x00\xa2\xffV\x009\x00\x14\x00\xaa\x00!\x00\xdd\xff\t\x00<\x00\x13\x00\x9b\xff\x15\xfe\x08\xff\xdd\xff\xd2\xff\x07\x00\xa0\xfe\xf7\xfe\xa9\x00|\x00\xfe\x00W\x00\x89\xffv\xff\xf6\xfe\xba\xfe\xba\xffG\xffO\xffr\x00#\xffL\xff\x8d\xff`\x00\xc1\xff\xac\xfe\x93\xff]\x00\xfe\xff)\x01\xa4\xffs\x00\xd0\x00\xd9\x00q\xff\xe1\xff\x9b\xff.\x03\xe4\x00\xef\xf6l\x03\xc1\x02\xd4\x01\x84\x03\x8b\x00.\x03e\x00\xa2\x00\xd1\x02F\xfe\xf0\xfe\x19\x03:\xfdk\xfd\xe3\xff\xb3\x01\x07\x01,\xff\xf7\xff\xce\xfe\xd0\xfeK\x03)\x01\xfa\xfc\xd1\xff\xff\x00\x9e\xffp\xfc\xcd\xfb\xa9\x01X\x01\x1f\xfdK\x00\xf8\x01\x11\x01\xf7\x01u\x01\xfc\x02\xf2\x02,\x00\xaf\x02\xad\x01t\xff:\xff\x8f\xfe\x1b\x00\x8d\x00\x80\x00|\x02\xea\x01\xd8\x00\xef\x00\xd9\x00P\x01\x99\xff\xdb\xff\xba\xfe\x94\xff}\x01\x9e\x00f\x00\xdf\x00\n\x010\x00\xd7\xff\x85\x00$\x00\xa4\xfel\xff\xba\xff\xfc\x027\x00\x0c\xff\xcb\x02\xec\xff\x10\x00\x8e\xfe\x95\xff<\x00\xfc\xff\x18\x01)\xffF\xfe\xdf\xfe \x00K\xfe\x8e\xff\x16\x01\xa6\x00p\x00\xd4\x00\x92\x00n\xff/\x00\x91\x00\xc7\xff>\xfe\xba\xffV\xff\xbb\xfe\x1c\xfe\x99\xff\xdd\x01\xb1\xff\x93\xfft\x00K\xff\xb3\xfe8\x00t\x00!\x01|\x00N\x00\xd7\x00\x87\x00\n\x00>\xfff\xff\t\x00=\x00.\x00\xd9\x01\x96\x01\x1a\x01\x0c\x00d\x00\xae\x00a\xff\xf5\xff\x17\xff*\xff!\x00\x8a\xffZ\x00\xb3\x00\xeb\xff\xfb\xff7\x00\xfe\xff \xff\xfa\xfe\x0e\xfff\x00\x81\x00\xf3\xffY\x00\n\x00\xba\xff\x81\xff]\xff\x00\xff\xb0\xff?\x00\xc8\xff\xfa\xff\x93\xffW\xffh\xff\x82\xffe\x00l\x00_\x00B\x00\x07\x007\x00f\x00\x82\xff}\xff\x04\x00\xc6\xff\xbc\xff\xd1\xffS\x00\xc1\x00i\x00\xfe\xff\xb0\xff\xcb\xff\x19\xff\'\xfe\x01\xffV\xff\x99\xff\xb1\xff\xc0\xff\xed\xff\x1d\x00\xff\xff\x97\xff$\xfft\xff\xee\xff\xe5\xffl\x00\x9e\x00O\x00\x06\x00\xcd\xff\xf2\xff\xa4\xff\xb0\xff>\x00\x07\x00\xe2\xff\xfe\xff\x02\x00\xfc\xff\xcd\xff\xae\xff\x8d\x00\xdf\x00\xd9\xff\xac\xfe\xc8\xff\xfc\x00\x93\x00t\x00_\x00\xaa\x00^\x003\x00\x97\x00\x83\xffU\xff\x16\x00\xc6\xffu\xff\xec\xff\xf5\xff^\xffn\xff\xa5\xff\x94\xff\x9f\xff\xf9\xff\x99\xff\xa4\xfe\xe1\xfe_\xff\xa6\xfe\\\xfe3\xff0\x00\r\x00B\xff\xc3\xff\x03\x00\xb4\xff\xe8\xff2\x00i\x00M\x00*\x00\xe0\xff\x7f\xff\xc6\xff\xb0\xff\x88\xff\xcd\xff\x12\x00\xf5\xff\x0f\x00=\x00\x03\x00\x88\xff\xb4\xff/\x00\'\x00\xc8\xff\xf1\xffR\x00\x17\x00\x12\x00a\x00\xa5\x00\x8b\x00o\x00K\x00K\x00e\x00b\x00p\x00\x91\x002\x00\xf6\xff\xf2\xff\xd6\xff\x03\x00\x93\xff\x9c\xff\xec\xff\xab\xff\x8f\xff\xaa\xff{\xff}\xff?\xff\x16\xff\x9c\xff\xcd\xff\xde\xff\xe3\xff\xa7\xff\xe7\xff\xcb\xff\xdf\xff\xd8\xff[\xffC\xff\x1b\xffa\xff\x03\x00\x11\x00\xc9\xff\xf2\xff\xe6\xff\xd6\xff\xa6\xff\xbd\xff\xdd\xff\x99\xffz\xffu\xff\x88\xff\xa2\xff\xa9\xff\x18\x00@\x00\x05\x00\xb9\xff\xd1\xff\xc6\xff\x06\x00\xe1\xff\x15\x00v\x00*\x00\xfd\xff\x94\xff\xcb\xff\x99\xff\x1e\x00\xc9\xffB\x00\x0c\x00S\x00\xed\xffg\x00E\xff\x8d\x00\x90\xfeu\xfb\xa5\x01\xdb\x00l\x01X\x01V\x00\x8f\x01G\x00U\x00\x07\x01\xf8\xfe\xfd\xffx\x01\xc1\xfe\xcc\xff)\x01[\x01\x14\x01\x7f\x00\x9c\x00\x9c\xff\x80\xff\xc9\x01\x16\x01\xd0\xfe\x8f\x00\x1c\x01i\xff\xe3\xfd\x00\xfe\x8c\x01\xdd\xffV\xfe\x00\xfe\xd7\xfe\xf2\x01\x9d\x01\xf6\x01\x7f\x01\xea\xfe\x8e\xff\xc7\x01h\x00\xa8\xff\x9e\xfe\xb3\xff\x11\x01|\xff\xb0\x00\xa8\x01"\x01b\x01\x94\xff\xe5\xff|\x00\xc3\x00\x8c\x01)\xff\xcf\xff?\x01\x0c\x00\xa6\x00 \x00\xc8\xff\xf9\x00f\xff\xd9\xfer\xfe&\xfe\x04\x00\xe5\x01\xb1\x01\x80\x01\x8e\x01\x8e\x00w\x00\xf7\xfe\x15\xff\xc4\xff\xe2\xfe\x87\x00\x03\x00v\xff\xb9\xff\xbd\xfe\xd5\xfeo\xfen\x00~\x00=\x00@\x00\xad\xff\x9f\x00T\x00\xd1\xffQ\xff\xc9\xfec\xff\x00\x00\xac\xfe\xdb\xff\x97\x00\xe0\x00\xc3\x00\xb3\x00\xc8\x01\xe0\x00\x00\x00\x8e\xff\x87\xff\x8f\xff\xb6\xff{\x00\x98\x00&\x00\xd4\xff\xea\xff\x85\xff\x07\xff^\x00\x89\x00\x18\x00\x97\x00\x81\x00\x9a\x00U\x00\x98\x00\xfc\x00\xdb\xff\xaf\xff\xb3\xffs\xff\x9d\xffw\xff\xd4\xff\xbe\xff\xca\xff\x12\x00\x0e\x00\xc3\xff\x80\xff\x87\xff\x8b\xff\x1e\xff[\xff\x97\xff\x88\xff\xd8\xff\t\x00I\x00\xb9\xff-\xff\x03\x00<\x00\xd2\xff3\x00\x1a\x00\xb4\xff\xb6\xff\xed\xff)\x00r\x00)\x00\xda\xffV\xff\xc8\xffP\x00z\xff\x87\xff\x86\xffn\xff\xe2\xff\xe5\xff!\x00\x8b\x00\xc6\xff\xb8\xff-\x00\'\x00\xee\xff\xe0\xff\xeb\xff\x01\x00,\x00\xc4\xff\x8f\xff\xdc\xff"\x00\'\x00\xfd\xff\xcd\xff\xd7\xff\xbe\xff\xb9\xff_\x00\x85\x00E\x00\x05\x00\xeb\xff\xfc\xff\xc7\xff\x93\xff\xb2\xffu\xff\x8e\xff\xfc\xff\xad\xff\x03\x00\x80\x00S\x00p\x00L\x00B\x007\x00>\x009\x00\xc7\xff\xce\xff\xb3\xffs\xff\xa6\xff\xa9\xff\x06\x00\t\x00\xee\xffD\x00o\x00=\x00T\x00[\x00\x0e\x00\x0b\x00\xfb\xff\xcc\xff\x7f\xffr\xff\xb2\xff\xfa\xff\x02\x00\xf7\xff#\x00X\x00S\x00G\x00i\x00B\x00.\x00N\x00P\x00?\x00\x08\x00\xfc\xff\x04\x00\xf0\xff \x002\x00i\x00i\x00y\x00\x92\x00\x9c\x00\x8b\x00h\x00k\x00a\x007\x00C\x000\x00-\x00%\x00=\x00`\x00Q\x00g\x00-\x00\xfa\xff\xd7\xff\xec\xff\x04\x00\x01\x00\xfc\xff\xd8\xff\xa1\xff\xb2\xff\xb6\xff\x92\xff\x95\xff{\xffv\xffG\xffm\xff\xa3\xff\x90\xff\xa5\xff\xe3\xff\xf2\xff\xf6\xff\xdf\xff\xc9\xff\xbc\xff\x97\xff\x97\xff}\xff\x94\xff\xb3\xff\x16\x001\x00=\x00\x1e\x00E\x00#\x00$\x00>\x00G\x00#\x00\x15\x00\x07\x00>\x00N\x00\x84\x00e\x00C\x00[\x00\x14\x00N\x002\x00]\x00U\x00o\x00\x12\x00x\x00\xaf\xff+\x00\xdd\xff,\x00\xa2\xffF\x00\xab\xff\x88\x00\x07\xffw\xfa\xac\x01\n\x01\xb4\x00\x1d\x01\xf4\xff?\x01@\x00\x0c\x00|\x00\xcd\xfe\'\xff\xa0\x01\x86\xfe\xc6\xfet\x00\x98\x00\x02\x00\xd1\xffw\x00+\xff\x93\xfe\x8e\x01\x1e\x01\x13\xfe\xb6\xff=\x01F\xff\x0e\xfe\x0b\xfe/\x01\xbe\x00\t\xfe\xb7\xff\xfe\xffK\x00H\x01\xe6\x009\x01t\x01\x99\xff\'\x01\x90\x00`\xff\xae\xff\xff\xfe0\x00\xe8\xfff\xffy\x00\x92\x00`\x00\xfd\xff\x1d\x00Z\x00~\xff\xaa\xff\x95\xfeJ\xff%\x00z\xffG\x00{\x00\xb6\x00#\x00B\xff$\x00\xc3\xff\xe0\xfe!\xffR\x00E\x01|\x01[\xff\xb9\xff\xb9\x00\x80\xff\xe4\xff\xb2\xff\x04\x00')
rollsound = memoryview(_ROLLSOUND)
_ENERGY = bytearray(b'7\x01>\x06\x1a\x0b\x81\x0fH\x13n\x16\xcd\x18s\x1aG\x1ba\x1b\xcd\x1a\xa1\x19\x0b\x18\x08\x16\xda\x13x\x11)\x0f\xf2\x0c\x01\x0bZ\t\x1c\x086\x07\xbf\x06\xae\x06\xe6\x06}\x07D\x08K\t\x86\n\xeb\x0bs\r\x14\x0f\xc0\x10\x80\x12<\x14\x04\x16\xbb\x17s\x19\x14\x1b\xad\x1c\x1e\x1er\x1f\x87 a!\xed!\'"\x0f"\x9d!\xc8 \x97\x1f\x05\x1e\x12\x1c\xd3\x19K\x17\x98\x14\xc3\x11\x01\x0fN\x0c\xe5\t\xcb\x07"\x06\x03\x05v\x04\x93\x04Q\x05\xce\x06\xf2\x08\xc9\x0b;\x0f\'\x13h\x17\xd7\x1bT \xbe$\xf3(\xea,m0y3\xec5\xc07\xf08x9f9\xb38\x807\xdc5\xe23\xb21b/\n-\xc6*\x9d(\xb5&\xff$\xa8#\x96"\xea!\x89!\x85!\xc6!V"\x1b#\x12$+%[&\x96\'\xcd(\xf7)\x0b+\xfd+\xca,l-\xdc-%.<.%.\xcd-(-<,\x08+v)\xac\'\xa0%s#8!\x0e\x1f\x05\x1d4\x1b\xb5\x19\x82\x18\xae\x17\x1f\x17\xe6\x16\xcb\x16\xd9\x16\xec\x16\xfe\x16\xf6\x16\xee\x16\xba\x16m\x16\xf5\x15N\x15u\x14d\x13)\x12\xba\x10%\x0fk\r\x8c\x0b\x7f\tO\x07\xf6\x04g\x02\xc0\xff\xe1\xfc\xe9\xf9\xc9\xf6\xa7\xf3t\xf0O\xed=\xeaM\xe7\x88\xe4\x05\xe2\xd6\xdf\x00\xde\xad\xdc\xd8\xdb\x97\xdb\xe8\xdb\xd4\xdcL\xde/\xe0}\xe2\x01\xe5\xaf\xe7c\xea\x05\xed\x80\xef\xb7\xf1\xa7\xf3;\xf5t\xf63\xf7\x8a\xf7F\xf7\x86\xf6?\xf5\x86\xf3]\xf1\xe0\xee\x15\xec\x08\xe9\xe4\xe5\xb9\xe2\xb0\xdf\xd6\xdcQ\xda,\xd8l\xd6*\xd5Z\xd4\x00\xd4\x14\xd4\x9b\xd4o\xd5\xa9\xd6\x13\xd8\xc0\xd9\x83\xdbd\xddK\xdf$\xe1\xf3\xe2\xa9\xe47\xe6\x99\xe7\xbd\xe8\xa2\xe9$\xeaX\xea\x16\xear\xe9e\xe8\xef\xe6\x15\xe5\xdb\xe2R\xe0\x96\xdd\xbc\xda\xee\xd76\xd5\xbb\xd2\x82\xd0\xa4\xce)\xcd\x16\xccp\xcb1\xcbU\xcb\xd7\xcb\xa4\xcc\xb5\xcd\xf8\xce\\\xd0\xd8\xd1V\xd3\xcd\xd4,\xd6f\xd7}\xd8S\xd9\x07\xdao\xda\xae\xda\xae\xda\x7f\xda$\xda\xa2\xd9\x02\xd9M\xd8\x86\xd7\xbf\xd6\xf6\xd5<\xd5\x8a\xd4\xf7\xd3p\xd3\x14\xd3\xd5\xd2\xec\xd2a\xd3M\xd4\xb6\xd5\xb5\xd7?\xdaZ\xdd\xff\xe0\x16\xe5\xa2\xe9x\xee\x94\xf3\xc1\xf8\xfc\xfd\x0e\x03\xe9\x07e\x0ch\x10\xdf\x13\xa9\x16\xbc\x18\r\x1a\x91\x1a[\x1aj\x19\xde\x17\xd3\x15d\x13\xbe\x10\x05\x0e_\x0b\xf5\x08\xe4\x06:\x05\x1c\x04y\x03Z\x03\xbc\x03\x8b\x04\xc9\x05c\x07A\t_\x0b\xa2\r\x07\x10v\x12\xea\x14Z\x17\xc0\x19\x15\x1cS\x1eo `" $\x98%\xc9&\xa1\'&(L(\x0e(u\'y&$%t#s!"\x1f\xa1\x1c\xeb\x19(\x17`\x14\xb5\x116\x0f\xff\x0c$\x0b\xbb\t\xdd\x08\x7f\x08\xc1\x08\x94\t\x0c\x0b \r\xd2\x0f\xfb\x12\x93\x16a\x1a]\x1eZ"H&\x04*~-\x890(345\xb76\xa47\xfc7\xd27"7\x086\x934\xd42\xe60\xd8.\xc7,\xbf*\xd6(\x1d\'\x9f%c$w#\xd0"~"t"\xaf"+#\xd8#\xb2$\xab%\xb9&\xce\'\xe4(\xed)\xe1*\xba+t,\x02-q-\xa6-\x93---j,_+\xfc)o(\xb7&\xdb$\n#F!\xa5\x1f>\x1e\x16\x1dJ\x1c\xca\x1b\xbc\x1b\xf0\x1br\x1c\x08\x1d\xc6\x1d`\x1e\xeb\x1e>\x1fW\x1f-\x1f\xb9\x1e\xfe\x1d\xe4\x1c~\x1b\xc5\x19\xad\x17O\x15\xab\x12\xbe\x0f\x9c\x0c9\t\xaf\x05\xf6\x010\xfe[\xfa~\xf6\xb7\xf2\x0e\xef\x92\xebT\xe8U\xe5\xa5\xe2=\xe06\xde\x8e\xdcB\xdbc\xda\xd8\xd9\xb5\xd9\xeb\xd9\x91\xda\x9b\xdb\x0e\xdd\xce\xde\xdf\xe0\t\xe3Z\xe5\xa9\xe7\xf7\xe9*\xec=\xee\x10\xf0\xa2\xf1\xde\xf2\xb8\xf3"\xf4\x12\xf4\x93\xf3\x96\xf26\xf1u\xefe\xed\x13\xeb\x8c\xe8\xde\xe5$\xe3l\xe0\xd2\xddf\xdb=\xd9_\xd7\xdb\xd5\xac\xd4\xf4\xd3\x9c\xd3\xc4\xd3C\xd44\xd5k\xd6\xed\xd7\xa0\xd9t\xdbY\xddC\xdf\'\xe1\xee\xe2\x9d\xe4\t\xe6A\xe7\x1e\xe8\xb8\xe8\xf5\xe8\xea\xe8\x8d\xe8\xdd\xe7\xcc\xe6U\xe5u\xe3@\xe1\xbd\xde\x1e\xdcg\xd9\xcd\xd6K\xd4\r\xd2\x12\xd0r\xce.\xcdR\xcc\xd5\xcb\xbd\xcb\xff\xcb\x90\xccm\xcd}\xce\xbc\xcf\x17\xd1}\xd2\xe8\xd3A\xd5\x85\xd6\xa5\xd7\x9e\xd8d\xd9\xf7\xd9U\xda}\xdav\xda;\xda\xdf\xd9X\xd9\xbe\xd8\r\xd8P\xd7\x90\xd6\xd3\xd5"\xd5|\xd4\xf4\xd3v\xd3,\xd3\x16\xd3[\xd3\x11\xd4D\xd5\x0c\xd7q\xd9l\xdc\x03\xe0#\xe4\xcb\xe8\xdb\xedB\xf3\xcd\xf8g\xfe\xd3\x03\xf9\x08\xae\r\xd1\x11N\x15\x00\x18\xeb\x19\xf4\x1a%\x1b{\x1a\r\x19\xf4\x16W\x14X\x11$\x0e\xe6\n\xc6\x07\xe9\x04s\x02\x7f\x00$\xffq\xfea\xfe\xf6\xfe\x1b\x00\xd5\x01\x10\x04\xba\x06\xc0\t\x06\ry\x10\x04\x14\x99\x17\x1d\x1b\x94\x1e\xdf!\xfc$\xce\'J*c,\x07.6/\xe6/\x100\xbd/\xee.\xaa-\xfe+\xf8)\x9d\'\x0b%?"Y\x1fb\x1cl\x19\x87\x16\xc8\x138\x11\xf8\x0e\x11\r\x9d\x0b\xab\nD\nl\n%\x0bz\x0cZ\x0e\xd5\x10\xcb\x13;\x17\xeb\x1a\xd5\x1e\xbf"\xa0&R*\xb5-\xbe0B3F5\xb86\x967\xea7\xb27\x007\xe55n4\xb02\xc70\xb6.\xaf,\xa4*\xc7(\r\'\x93%[$i#\xca"n"j"\x9e"\x1d#\xc6#\xa4$\x97%\xa8&\xbc\'\xd3(\xde)\xd2*\xaf+S,\xba,\xbf,c,\xaf+\x9b*()l\'y%]#6!\x19\x1f%\x1dx\x1bK\x1a\xac\x19\xad\x19F\x1a\\\x1b\xeb\x1c\xcb\x1e\xf3 8#\x8c%\xc4\'\xae)\x19+\xda+\xd9+\x00+T)\xde&\xa5#\xca\x1fv\x1b\xb6\x16\xad\x11x\x0c3\x07\xe7\x01\xcb\xfc\xc8\xf7\x0e\xf3\x99\xee\x95\xea\xf6\xe6\xd5\xe3\x1a\xe1\xd8\xde\xee\xdcp\xdbN\xda\x85\xd9\t\xd9\xdd\xd8\xe6\xd8&\xd9\xa0\xd9H\xda$\xdb3\xdcv\xdd\xdf\xdel\xe0\x18\xe2\xd1\xe3\x91\xe5K\xe7\xf0\xe8p\xea\xc8\xeb\xee\xec\xd9\xed\x8b\xee\xfd\xee%\xef\xff\xee\x88\xee\xc1\xed\xb5\xecp\xeb\xfb\xe9_\xe8\x9e\xe6\xbf\xe4\xd6\xe2\xe1\xe0\x02\xdf.\xdd\x8a\xdb\x0e\xda\xd3\xd8\xda\xd72\xd7\xd9\xd6\xd9\xd6&\xd7\xb4\xd7\x83\xd8m\xd9\x82\xda\x99\xdb\xbc\xdc\xd7\xdd\xe4\xde\xe9\xdf\xd1\xe0\xaf\xe1l\xe2\x15\xe3\x9a\xe3\x07\xe4@\xe4Z\xe47\xe4\xda\xe39\xe3H\xe2\x12\xe1\x83\xdf\xbf\xdd\xc6\xdb\xbe\xd9\xb2\xd7\xb8\xd5\xe1\xd3:\xd2\xcd\xd0\xaa\xcf\xc9\xce<\xce\xf6\xcd\xfb\xcdC\xce\xc3\xce{\xcfX\xd0R\xd1c\xd2p\xd3\x8b\xd4\x83\xd5{\xd6E\xd7\xfc\xd7\x83\xd8\xea\xd8\'\xd9=\xd9-\xd9\xfb\xd8\xad\xd8I\xd8\xcd\xd7J\xd7\xbd\xd6*\xd6\xa2\xd5\x18\xd5\xb6\xd4\x8e\xd4\xd0\xd4\x98\xd5\x02\xd7\x0f\xd9\xd8\xdbT\xdfz\xe3D\xe8\x8e\xed:\xf3\x1e\xf9\x0e\xff\xe5\x04~\n\xb0\x0fY\x14R\x18t\x1b\xa3\x1d\xce\x1e\xe7\x1e\xf8\x1d\x05\x1c.\x19\x96\x15n\x11\xf3\x0cP\x08\xce\x03\x8a\xff\xd0\xfb\xb6\xf8\x83\xf6<\xf5\x12\xf5\xf0\xf5\xeb\xf7\xd9\xfa\x9b\xfe\x06\x03\xe6\x07(\r\x98\x12\x1a\x18}\x1d\x97"K\'}+"/&2\x8d4C6\\7\xd17\xac7\xfe6\xca504)2\xd9/8-m*p\'i$]!Y\x1eu\x1b\xac\x18\x13\x16\xb3\x13\x95\x11\xd1\x0fl\x0et\r\xf8\x0c\xfb\x0c\x84\r\x90\x0e\x17\x10\x10\x12}\x14?\x17d\x1a\xaf\x1d\x1c!}$\xba\'\xc1*\x80-\xe8/\xf21\x803\xa64F5\x7f5>5\xa24\xad3p2\xff0i/\xbb-\x0c,j*\xdd(~\'E&K%\x87$\x05$\xbf#\xb6#\xe7#I$\xd2$\x86%K&*\'\r(\xee(\xc8)}*\xe9*\r+\xc9*-*,)\xda\'@&c$p"v \x91\x1e\xda\x1ck\x1bD\x1a\x8d\x19G\x19\x96\x19d\x1a\xbe\x1bp\x1d\x83\x1f\xba!\'$\x83&\xe7(\x11+\x13-\xb4.\xe5/q0?07/C-w*\xb3&M"\x04\x1db\x17\x01\x11\xbe\n\x97\x03')
energy = memoryview(_ENERGY)
_BEEP = const(b'\x13\x04\xb6\x05#\x03\xe0\x01\xd9\xfcb\xf4\x98\xec\xa8\xe4\x19\xd9r\xdd\x06\xfb\x87\x15\t3\x94c\xa1y\xb5^\xf4>V*\xf5\xfd\x16\xc2\x03\xa6\xdc\xa4\x86\x9d\xd6\xa5\xc2\xd4\xc8\x05K!\x1cA ezf\xe1I\xe32Q\x18\xf7\xe5\xb0\xb8\xfc\xaa\xc3\xa7\xc2\xa4\x15\xbd\x9d\xef\xe0\x15\xf1,UNEf\x90X\x02<\x14\'"\x04\xbb\xcf\xd5\xaf%\xab\xb4\xa5\x0c\xa9\x95\xce\x8a\xfd\xa3\x19\x064ZV\x19`\\HJ0;\x1b\xbc\xf1\x00\xc4\xdc\xb2`\xb2A\xae\xe6\xbc\x02\xe9\x1d\x10I%t?cY\x07S\xd06\xb9!\xdb\x07\xfc\xdb\x1e\xbax\xb4\x14\xb5I\xb7R\xd2K\xfe\x0b\x1dq13K\xf8W!E\x92)\x9d\x14~\xf5\x91\xcd^\xb9C\xba\x19\xbb\xee\xc4\xd0\xe6l\x0c\xf2!\xfe5\x98L\x94K\x033&\x1d\xa6\x079\xe4\xb4\xc4\xa0\xbd\xbb\xbe\x82\xbfy\xd5\xca\xfc\xa4\x18\xe1)_AhM\xbc;\x89#\x96\x12\xe4\xf5\xf3\xd0j\xc1\xa2\xc3h\xc1\x05\xca\xba\xec=\rc\x1bR.\xf6D\xc4?\x97&f\x17\x9a\x06\xd9\xe2\x89\xc8\xe3\xc9\x8c\xcb\x0c\xc8\x10\xdd%\x02\xa1\x144\x1d\x943\xa8@\xeb.\xf5\x19{\x10\xd6\xfa\x83\xd9\xe9\xcc\xc4\xd2\xe4\xd1\xcd\xd5\x15\xf1\xc1\r<\x18w"y3\xdf2\x80\x1eJ\x0f\xa5\x04(\xee\xfe\xd74\xd5f\xd9\x9e\xd8\xf4\xe2\x1a\xfc\xb5\x0e\xb1\x16^#9.\xb1&\x86\x16}\x0b\x11\xfd{\xe7\x91\xda\xef\xda\xaa\xdc\x1b\xe1\xd1\xf1\x8c\x06<\x12T\x1am$\x9a%\x1a\x1a\x8c\rh\x03S\xf4\x9e\xe4\xc1\xde\xb1\xdf\xec\xe1\x1d\xea\x1b\xfaU\t\x87\x13&\x1cB!\x91\x1dI\x13\xc0\x07u\xfb\xdc\xee\x93\xe6\xd5\xe3V\xe5D\xebi\xf5\x08\x01\r\x0b}\x13\xf3\x18 \x19D\x15\x8c\r\xbb\x02N\xf7\xac\xee\x02\xe98\xe6k\xea\x8b\xf3_\xfck\x049\x0cx\x11\x01\x11\x95\x0e\xb9\x0c\xe5\x07\xd6\x00\x03\xfb\x1c\xf7=\xf1\x07\xec\xf0\xed\x02\xf3\xf8\xf83\x02\xe2\x0e\xea\x17\x98\x18\xd4\x15b\x0e\x0c\x01\x9d\xf3G\xec\x92\xeb\xfe\xec\x13\xf3@\xfdY\x04~\x06A\x06\t\x08)\x08+\x07\xe2\t\x91\x0b\xfd\x07b\xffL\xf6T\xed\xe7\xe4Q\xe6\x1d\xf1-\x00h\x0f\x87\x1b2 \xb6\x15\xf6\x03\'\xf3\x05\xe6\x07\xe2\xeb\xe9\xa2\xfd\xd8\x0f\x87\x19\xd2\x1a\xed\r\xdd\xf7\xd8\xe0\x9c\xd7\x9e\xdfq\xf3\xfa\x13N/z:K.G\r1\xe8?\xc5\x94\xb9p\xca\xc8\xef\xb9\x1fWC\x80S5BI\x16\xf3\xe4\x05\xb9F\xa9\xa6\xb7\xca\xe2T\x1c\xf1F\x1cY9C\x15\x0f\xa7\xd5o\xaa\x9f\xaf\xb2\xd2 \x07\xd7>uS\x1cM\x0f!\xfd\xe7"\xbc\x93\xa5\xc2\xba\xe5\xe1\xe7\x16xB\xb0Lr>\xca\x12m\xe6\xa6\xc3;\xb9\x16\xd0\xc4\xf2\x9b\x1d\xcd6\x9f:\x8e\'U\x02\xf4\xe3\xf0\xce|\xd2\xfa\xe8j\tG)\xe23",\xf2\r0\xe8Y\xca\n\xbe{\xcf\x12\xf1P\x1d\xbc?\xc4I\xfa:\x03\x13\x8a\xe8\xee\xc4H\xb7V\xc7\x9c\xe7\x87\x11\xb4/Q9e-\x90\x0b\x11\xebs\xd3\x9d\xcf\x13\xe4\x90\x00\xda!@1j+:\x16\x8f\xef\xb5\xd3+\xc5D\xd0\x1b\xf3\x1b\x15\xe49@B\x843Z\x14\xa4\xe6\x0f\xce\xad\xbc}\xc9\xb8\xe8\xca\x04\x9a%F( $u\x0e~\xf1x\xebt\xe4_\xf8\xb0\x0b\xec\x1bd)8\x15=\x06\xc7\xe6\xa8\xcf$\xce\x99\xd3\xbf\xf7\x8b\x0f.*V8f,\xdc\x1f\n\xffK\xed\xb6\xdf3\xdb6\xec\x1b\xf4Y\x05\xe7\x05\xd2\x00\xc1\xfc\x80\xec \xf1\x9d\xf5\xa7\x07#\x1d\x97&;2\xaa!#\r6\xf1O\xd4\n\xcbl\xc4\xa7\xda\xc6\xf34\x0c\xab%\x0b*\x83,\xab\x190\tL\xffH\xf0\xed\xf2\x86\xf1t\xf7\x89\xf6\x07\xef\x1a\xf39\xecP\xf26\xfdU\r\xa4 \xfe"\xf7(z\x1b\xc6\x04i\xef\x82\xd8\xc2\xd2+\xcd\xf5\xdc\xe6\xf6\xb3\n\xda!\xc1)\x86.\xcf \x9e\x0bF\x00o\xed\x87\xe6\x07\xe3\x1b\xe8\xc7\xee\xb8\xec\x9a\xf8\x90\xfc\x9f\x01\x88\x0b\x0b\x16&%\xb3"\xc7"^\x19\x90\x00l\xebb\xd4\xed\xcc\x8c\xc9g\xd4\xad\xf2\x9f\t\xb2"\xa6/}3\x9e*\t\x128\x04\x0f\xf2\x16\xe5<\xe1h\xe0\xb9\xe7\xbf\xe6g\xf0q\xfc<\x03\x00\x12P\x1c$(\x98&\x1e\x1e\x0f\x16\x82\xfei\xea\xbc\xd8\xe5\xd0\x9e\xd2B\xd99\xf3\xf6\x08z\x1bh*\xc4.\xcb+R\x18\x1c\t}\xf9\xeb\xe6\x02\xdf1\xdb6\xe11\xe6<\xf0\x9a\x01D\n\xb3\x15}\x1d\xc8!r\x1ff\x13o\n\xff\xf8\x19\xe8\xda\xdc\n\xd7\x97\xdc\xde\xe3<\xf5]\x08\x03\x17V$J\'\xda%\xb8\x19\xb4\t\xd7\xfbj\xeb\xd6\xe2!\xde\x89\xe17\xea\xe9\xf2S\x00\x90\tf\x12\x9d\x17\x12\x19\x01\x1a\x00\x13\xc0\n\x13\xff\xe4\xf2\x00\xe9\xe3\xe0\x9d\xe2\x1c\xe8\xc3\xf20\x01\xa3\x0e\xef\x19W\x1c\x05\x1bz\x14P\x08\x9c\xfcx\xf2\xa3\xed\xb6\xe9<\xea\x0e\xf17\xf7K\xfe\xbc\x05H\x0e\xbe\x12-\x12\xb1\x12\x8f\x0em\x06A\xfd\xb7\xf5\xaa\xef;\xe9\xaf\xea\xff\xf0*\xf8\xc1\x00%\n\xda\x12\xb7\x13|\x11\xe6\re\x05\xae\xfb\x1d\xf49\xf2\xdf\xf0[\xf1\x80\xf7\xcb\xfcw\x00Q\x03\x9a\x07V\n\xc0\x08\xf9\x08\xf7\x07h\x04\x11\x00j\xfc\x05\xfa8\xf5V\xf3\xbb\xf5\x14\xf9S\xfe\xc0\x04\xe6\x0b\x85\x0e\xf6\x0c\xf5\nb\x05\x1c\xfe/\xf8Z\xf6y\xf7\r\xf9\x1e\xfe]\x02\x1b\x03\x18\x02J\x01\xd7\x01\x92\x01\xf6\x03\xc5\x07\xc1\x08\xce\x06#\x02q\xfc5\xf5\x97\xf0B\xf2\xf0\xf7\xd7\x00\x0c\n\x0f\x11\xe7\x11#\x0bO\x01?\xf6\x82\xee\xac\xedX\xf4\x9b\xff\x88\t\x7f\x0f\xab\r\xcb\x03\xf0\xf6\xf6\xec\xfb\xebx\xf4C\x04\xb3\x14\x8a\x1c<\x19e\x0b\x9e\xfa\x9d\xebS\xe2o\xe5\xfe\xf0@\x02\x11\x13\x1d\x1c`\x1bi\x0f\xb4\xfe\x96\xed\xbf\xe2b\xe4\xe1\xef\x15\x02\x98\x13y\x1e\xd9\x1d\x87\x10\xf7\xfe\xc5\xedZ\xe30\xe4X\xef\t\x01 \x10[\x19{\x18\xc3\x0c(\xfc7\xec:\xe5\xa2\xe7`\xf3}\x05\xa8\x13=\x19U\x14H\x08\xc1\xf8\x10\xeb6\xe8\x11\xef\xb4\xfc?\x0c\xac\x17\x16\x1a\x00\x10\xed\x00\xec\xf1.\xe7\x99\xe6\x10\xf0\xda\x00b\x0f\xb9\x17\x10\x18\xe6\r\x17\xffa\xf1\xc6\xebH\xee\xf7\xf6z\x04\xbf\r\xdf\x0e\x06\x08\xdd\xfcQ\xf2\xb9\xea\xe5\xed\xc1\xf9L\x08\x8a\x15\xcb\x1b{\x19\xf1\x0bU\xfa*\xec\xe0\xe3\x14\xe6\xef\xf0\xb4\x01t\x10z\x17\xa3\x17`\x0e\xf3\x00\xdc\xf4R\xefc\xf2\xc5\xf9\xb6\x05\x9c\x0e\xa8\x0f\xf8\t\xe6\xfe\xa1\xf4\x07\xecl\xeb>\xf3\xf0\xfd=\n\xd4\x11\xa0\x13U\r\x05\x02\xc7\xf8\xd5\xf1#\xf2Q\xf8,\x02\xa2\x0b\x97\x0e\x02\r#\x04\x86\xf8#\xef\x1c\xea\x15\xee\xc1\xf6\x12\x04\x91\x10\xf3\x16\x19\x18\xe8\x10\x11\x07)\xfc)\xf4\x9f\xf2t\xf3\x15\xf9\xa1\xfd\x10\x00\\\x00\xd3\xfcY\xfb\x10\xfa\xa6\xfd\xb1\x05\x8b\rJ\x15\x0c\x16\x1b\x11\x06\x05\xee\xf4\xc8\xe8&\xe0\xb0\xe15\xeb\xb7\xf9\xdd\t\xd7\x13\x81\x19D\x16\xe1\rZ\x05\x0e\xfd*\xfa~\xf8\x1d\xfa\xf5\xfb"\xfa\x02\xf9]\xf6\x9d\xf6\xcc\xf8\xcf\xfd\xa3\x06\x02\r\xb7\x13"\x15\x96\x10\x17\t\x7f\xfc\xaf\xf0&\xe7\x8e\xe6\xf5\xed\x0f\xf7f\x04M\x0f\x1a\x15F\x13\xa7\x0c\x0b\x07e\xfer\xf9\xb3\xf8\xd5\xf9O\xfc{\xfc\x14\xfe\x17\xfd6\xfb\x16\xfd\x0f\x00\xe8\x05\xf6\n4\x0f$\x10?\n\xf7\x01\x7f\xf7\xc8\xee\xb6\xeaY\xec\xa5\xf4X\xfe\xa7\x08\xb5\x10L\x13\xa5\x10\x19\t\xbe\x00\xeb\xf8N\xf3\xed\xf1x\xf3\xde\xf6N\xfa&\xfdy\xff\xd3\x00\x86\x022\x050\x08\x9c\n\'\x0bn\t\xc4\x04\x83\xfd<\xf6\xc0\xf0\xb5\xee\xf0\xf0F\xf7\x11\x00l\x08\xdd\x0e\xe0\x11\x87\x10\x8e\x0b\xd7\x04|\xfe\x1b\xf9\x0b\xf6\x8c\xf5\xc3\xf6\xa5\xf8\xb5\xfaV\xfdy\xff\xbc\x01w\x04\xfd\x06\xea\x08\xe8\x08\x98\x07\x1c\x04\xdf\xfe\xbd\xf9+\xf5]\xf3\r\xf4\x94\xf7n\xfdB\x03\xcf\x08m\x0b\x81\x0bN\t\x8c\x04\xe6\xffy\xfb\x07\xf9\xef\xf7\x15\xf8\x8a\xfao\xfcW\xfe~\x00\xa5\x02\xd6\x04\xf8\x05\xfb\x07\xb7\x08\x03\x07m\x04i\x00\xd7\xfb\xb0\xf6\xe4\xf3\xb9\xf4\xe3\xf6\xe5\xfbq\x02m\x08\xca\x0b\x03\x0c;\x0bJ\x07\'\x02G\xfeI\xfbH\xf9\xb1\xf7\x82\xf8\xfe\xf9\xe2\xfaw\xfd\xbb\x00\x13\x04r\x06\xb0\x08:\nZ\x08P\x05\x82\x01\xf6\xfc+\xf8\xe6\xf4T\xf5\r\xf7`\xfa\xab\xff\xb1\x04\x0e\x08\x01\t+\tL\x07h\x03*\x00\x91\xfd\xa8\xfbN\xfa\xd7\xfa\x7f\xfc\x16\xfd\t\xfe\x8c\xff\x1b\x01\x1e\x022\x03\xfe\x04\x15\x05\xdd\x03T\x02\x15\x00\xe1\xfc\x88\xf9e\xf8\xae\xf8\xff\xf9\x8e\xfd$\x02\x17\x06\xee\x07\x84\x08\x88\x07\x18\x04Y\x00Q\xfd)\xfb\xae\xf9\xb2\xf9k\xfb\xed\xfc<\xfe\xd9\xffI\x01\xf6\x01h\x02\x9f\x03d\x04v\x040\x04P\x03\xf7\x00^\xfdS\xfa \xf8P\xf7\xd5\xf8\xc4\xfc\xd6\x01\x1d\x06?\t\x16\n\xda\x07\x98\x03\xa4\xfe\xab\xfa\xf7\xf7\xca\xf73\xfa\xa8\xfd\x16\x01q\x03a\x04\x8f\x03\x99\x01!\x00J\xffk\xff4\x00o\x01!\x02L\x01\x94\xffN\xfd;\xfb*\xfa\x04\xfb\x14\xfe\xdf\x01\xb7\x05R\x08\x99\x08B\x06\xc5\x01W\xfd\xb9\xf9J\xf8\xa2\xf9\xff\xfc>\x01\x13\x04q\x05\x95\x04w\x01\x04\xfeZ\xfb\t\xfb\xa5\xfc\xb7\xffl\x03$\x05\xd7\x04_\x02\xea\xfe\x88\xfby\xf9\xb6\xfa\xd4\xfd\xe8\x01\xa5\x05B\x07+\x06?\x02\xdf\xfd\x91\xfa\xea\xf8\xa2\xfa\x93\xfet\x03\xc2\x06}\x07\xbc\x05\xe1\x00m\xfb\x97\xf7\x15\xf7\x1c\xfaL\xff\x90\x05\x9e\t\x84\t\x93\x05\xdc\xfe\x1d\xf8\x99\xf3S\xf4D\xfa\xef\x02\xa1\x0b\xba\x10\xf0\x0f\x88\x08\x82\xfd\xf5\xf2\xf3\xecZ\xee\x87\xf6\x8e\x01\xda\t"\x0c\xb2\x08A\x02&\xfd\xb0\xfa\xd7\xfb\x84\xffL\x03\'\x06"\x06\xfc\x02\x10\xfe:\xf9 \xf6\x1e\xf5\xc1\xf7h\xfd\t\x04\xff\t\xe9\rv\x0ep\n\x84\x03\xbd\xfb\xf0\xf4\xc2\xf0\xdf\xf0{\xf5\xf7\xfb\xf6\x02P\x08\xa2\n2\t\x1a\x05s\x01\x9f\xfe\xd3\xfd8\xff\x1a\x01)\x02G\x00\\\xfd\xc5\xf9\xe8\xf6\x92\xf7\xa2\xfb\xd5\x02\xca\t\xa8\x0e\xc7\x0f\xe0\n\xc4\x02k\xf9\\\xf2\x96\xef\x90\xf1\xe8\xf8C\x01\xa0\x08\xeb\x0c\xbb\x0ca\t4\x03e\xfeL\xfb\x08\xfaR\xfb\xb1\xfc\xd1\xfd\xc5\xfc\xd7\xfaq\xf9N\xf8\x9b\xfa\x82\xffr\x06\xd3\x0c\xe4\x0f\x84\x0fQ\t\xda\xff\xe7\xf5\x1e\xeej\xebo\xedX\xf5\x9b\xff\xe3\x08\xe7\x0f9\x12\x98\x10\xcb\n\xf7\x03U\xfeh\xf9K\xf7\x9e\xf6.\xf7\xc0\xf7\xfd\xf7\xdc\xf9\x1a\xfcB\x00\x0e\x063\x0cG\x11=\x12\xa3\x0fK\x08\x80\xfd\xfa\xf2\xce\xea-\xe8\xad\xea\xc2\xf23\xfe\xb8\x08\xfa\x10\x7f\x14\\\x13\xff\rQ\x06~\xffl\xf9\xd4\xf5\x9b\xf4\xea\xf4b\xf6\xd8\xf7\x95\xfa\xd4\xfd\xda\x01\xeb\x06\x9a\x0b\x12\x0fB\x0f\x03\x0c|\x05\x7f\xfc\xed\xf3\xb6\xed\xe4\xeb\xd5\xee\xba\xf5\x07\xff\t\x08\xd0\x0e\xb8\x11a\x10\xde\x0b5\x05p\xfe)\xf9u\xf6\x11\xf6D\xf7\x84\xf9\xe5\xfb!\xfeK\x00\xe7\x02\xdd\x05\xbb\x08\xc9\n$\x0b\xee\x08%\x04\xb7\xfd(\xf7\x15\xf2 \xf0\xf9\xf1C\xf7|\xfe\xdc\x05\x9f\x0b;\x0eg\r\xaa\tZ\x04\xd9\xfeq\xfa\xe4\xf7\x1c\xf7\x91\xf7\xe4\xf8\x98\xfa\x8c\xfc\xe0\xfe\xea\x01^\x05\xa9\x08\x11\x0b\xb7\x0b\xf5\t\xbc\x05\x05\x00\x12\xfa\'\xf5\xc2\xf2{\xf3\xf7\xf6>\xfc\xfb\x01\xea\x06\xa4\t\xfe\tV\x08B\x05\xb1\x01i\xfe.\xfc\xbf\xfa\'\xfah\xfa.\xfbe\xfc\xfa\xfdD\x00\xc9\x02\x15\x05\xf2\x06\x8c\x07~\x06\xbb\x03\xf6\xff\x0b\xfc\xa7\xf8\n\xf7\x8a\xf7\xdd\xf9z\xfdv\x01\x0f\x05\n\x075\x07\xe4\x05f\x03\x8e\x00\xf8\xfdJ\xfct\xfb?\xfb\xd1\xfb\xaf\xfc\xb4\xfd\xd9\xfe=\x00\xbe\x01\n\x03\x18\x04\x99\x04\x1a\x04\x98\x02L\x00\xcf\xfd\x8f\xfbQ\xfa|\xfa\xe6\xfb*\xfe\xc4\x00\x1b\x03\x99\x04\x04\x05~\x04:\x03\x8a\x01\xd8\xff\x85\xfe\x9b\xfd\x1e\xfd\x1b\xfd\x87\xfdJ\xfeS\xff\x8d\x00\xb3\x01\x86\x02\xee\x02\xd4\x02R\x02\\\x01Q\x004\xff9\xfe\x8f\xfdS\xfd\xaa\xfd{\xfe\xad\xff\x1e\x01T\x025\x03G\x03\xa7\x02[\x01\xa4\xff\x01\xfe\xa7\xfc\x15\xfcJ\xfc/\xfd\xb3\xfe9\x00\x9c\x01\\\x02\x86\x02>\x02')
beep = memoryview(_BEEP)

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GLOBAL OBJECTS: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

machine.freq(240000000)

# init object for accessing display
tft = st7789fbuf.ST7789(
    machine.SPI(
        1,baudrate=40000000,sck=machine.Pin(36),mosi=machine.Pin(35),miso=None),
    _DISPLAY_HEIGHT,
    _DISPLAY_WIDTH,
    reset=machine.Pin(33, machine.Pin.OUT),
    cs=machine.Pin(37, machine.Pin.OUT),
    dc=machine.Pin(34, machine.Pin.OUT),
    backlight=machine.Pin(38, machine.Pin.OUT),
    rotation=1,
    color_order=st7789fbuf.BGR,
    reserved_bytearray=reserved_bytearray
    )

# object for accessing microhydra config (Delete if unneeded)
config = mhconfig.Config()

sound = M5Sound.M5Sound(channels=1)

# object for reading keypresses
kb = keyboard.KeyBoard()

adc0 = machine.ADC(16)
adc1 = machine.ADC(17)
adc2 = machine.ADC(10)

#--------------------------------------------------------------------------------------------------
#-------------------------------------- FUNCTION DEFINITIONS: -------------------------------------
#--------------------------------------------------------------------------------------------------

def roll_is_pressed():
    # check if roll key is currently pressed down
    kb.get_new_keys()
    for key in kb.key_state:
        if key in _ROLL_KEYS:
            return True
    return False
    

def split_lines(text, max_length=_MAX_H_CHARS):
    """Split a string into multiple lines, based on max line-length."""
    lines = []
    current_line = text
    
    while len(current_line) > max_length:
        lines.append(current_line[:max_length])
        current_line = current_line[max_length:]
        
    lines.append(current_line)
    return lines

def roll_sound():
    if not config['ui_sound']:
        return
    note = random.randint(2,28)
    volume = 10 + (config['volume']//2)
    sound.play(rollsound, note=note, octave=3, volume=volume)

def energy_sound(note):
    if not config['ui_sound']:
        return
    volume = 10 + (config['volume']//2)
    sound.play(energy, note=note, octave=4, volume=volume, loop=True)
    
def beep_sound(note=12):
    if not config['ui_sound']:
        return
    volume = 10 + (config['volume']//2)
    sound.play(beep, note=note, octave=3, volume=volume)

def avg(vals):
    result = 0
    for val in vals:
        result += val
        
    result /= len(vals)
    return result

def splitxy(vals):
    xvals=[]
    yvals=[]
    
    for idx in range(0,len(vals),2):
        xvals.append(vals[idx])
        yvals.append(vals[idx+1])
        
    return xvals, yvals

def iseven(num):
    if num%2 == 0:
        return True
    else:
        return False
    
def ease_out_circ(x):
    return math.sqrt(1 - ((x - 1) ** 2))

def ease_out_bounce(x):
    _n1 = const(7.5625)
    _d1 = const(2.75)

    if x < 1 / _d1:
        return _n1 * x * x
    elif x < 2 / _d1:
        x -= 1.5 / _d1
        return _n1 * x * x + 0.75
    elif x < 2.5 / _d1:
        x -= 2.25 / _d1
        return _n1 * x * x + 0.9375
    else:
        x -= 2.625 / _d1
        return _n1 * x * x + 0.984375

#-------------------------------------- RNG: -------------------------------------
def adc_chaos_digit():
    """
    this has been tested to produce approximately uniform dist of numbers from 0-9
    Changing the formula just slightly can create major changes to the likelyhood of the resulting digits.
    """
    return str((
    ((adc0.read_u16() >> 0x4) & 0xFF) ^ (((adc2.read_u16() >> 0x4) & 0xFF) * ((adc1.read_u16() >> 0x4) & 0xFF))
    )%10)

def get_chaos(digits=_MAX_TOTAL_CHARS):
    result = ''
    for i in range(digits):
        result += adc_chaos_digit()
    return result

def rand_int_from_seed(seed, minimum, maximum):
    maximum += 1
    width = maximum - minimum

    output = 0
    while len(seed) > 3:
        output += int(seed[-3:])
        seed = seed[:-3]
    
    return (output % width) + minimum
    
#-------------------------------------- SHAPES: ------------------------------------
_ROTATE5 = const(1.256637)
_ROTATE6 = const(1.047198)

def draw_d2(x, y, angle=0,scale=1):
    rad=int(260*scale)
    
    x_rad = max(int(round(abs(math.sin(angle) * rad))),2)
    
    back_x = int(round(x + (math.cos(angle)*3)))
    back_y = y+1
    
    mid_x = (back_x + x) // 2
    
    if math.sin(angle) < 0:
        tft.ellipse(back_x,back_y,x_rad,rad,config.palette[3])
        tft.ellipse(mid_x,back_y,x_rad,rad,config.palette[2])
        tft.ellipse(mid_x,y,x_rad,rad,config.palette[2])
        tft.ellipse(x,y,x_rad,rad,config.palette[3])
        
    else:
        tft.ellipse(x,y,x_rad,rad,config.palette[3])
        tft.ellipse(mid_x,y,x_rad,rad,config.palette[2])
        tft.ellipse(mid_x,back_y,x_rad,rad,config.palette[2])
        tft.ellipse(back_x,back_y,x_rad,rad,config.palette[3])
        
def draw_d4(x, y, angle=0, scale=1):
    outline = array('h', (36,538, 612,538, 324,38))
    center_x = int(324 * scale)
    center_y = int(371 * scale)
    tft.polygon(outline, x-center_x, y-center_y, config.palette[4], center_x=center_x, center_y=center_y, angle=angle, scale=scale)

def draw_d6(x, y, angle=0, scale=1):
    outline = array('h', (0,0, 500,0, 500,500, 0,500))
    
    center=int(250*scale)
    tft.polygon(outline, x-center, y-center, config.palette[4], center_x=center, center_y=center, angle=angle, scale=scale)

def draw_d8(x, y, angle=0, scale=1):
    tricoords = array('h', (15, 190,619, 190,319, 714))
    outline = array('h', (15, 189,319, 17,619, 193,619, 541,315, 713,15, 533))
    
    center_x = int(318 * scale)
    center_y = int(364 * scale)
    
    tft.polygon(outline, x-center_x, y-center_y, config.palette[3], center_x=center_x, center_y=center_y, angle=angle, scale=scale)
    tft.polygon(tricoords, x-center_x, y-center_y, config.palette[4], center_x=center_x, center_y=center_y, angle=angle, scale=scale)

def draw_d10(x, y, angle=0, scale=1):
    centercoords = array('h', (319, 3,499, 371,315, 491,135, 371))
    outline = array('h', (319, 2,583, 190,615, 366,499, 374,611, 366,315, 626,319, 498,315, 626,19, 366,135, 374,19, 362,51, 194))
    
    center_x = int(318 * scale)
    center_y = int(298 * scale) # 295 center/ 364 tri center
    
    tft.polygon(outline, x-center_x, y-center_y, config.palette[3], center_x=center_x, center_y=center_y, angle=angle, scale=scale)
    tft.polygon(centercoords, x-center_x, y-center_y, config.palette[4], center_x=center_x, center_y=center_y, angle=angle, scale=scale)

def draw_d12(x, y, angle=0, scale=1):
    #_ROTATE = const(1.047198)
    
    main_pentagon = array('h', (139, 257,315, 129,495, 257,431, 469,203, 469))
    second_pentagon = array('h', (319, 127,319, 11,499, 67,611, 223,499, 259))
    
    center = int(316*scale)
    for i in range(5):
        tft.polygon(second_pentagon, x-center, y-center, config.palette[3], center_x=center, center_y=center, angle=angle+_ROTATE5*i, scale=scale)
    tft.polygon(main_pentagon, x-center, y-center, config.palette[4], center_x=center, center_y=center, angle=angle, scale=scale)

def draw_d20(x, y, angle=0, scale=1):
    outline = array('h', (9,186,321,10,629,178,629,546,317,722,5,550))
    mid = array('h', (13,186,321,106,321,6,317,110,625,186,533,498,621,542,533,494,320,718,103,494,14,546,104,494))
    tri = array('h', (105,494,317,110,537,498))
    
    center_x = int(320 * scale)
    center_y = int(366 * scale)
    
    tft.polygon(outline, x-center_x, y-center_y, config.palette[3], center_x=center_x, center_y=center_y, angle=angle, scale=scale)
    tft.polygon(mid, x-center_x, y-center_y, config.palette[3], center_x=center_x, center_y=center_y, angle=angle, scale=scale)
    tft.polygon(tri, x-center_x, y-center_y, config.palette[4], center_x=center_x, center_y=center_y, angle=angle, scale=scale)

def draw_d100(x, y, angle=0, scale=1):
    _ROTATE_OUTER = const(0.5711986)
    
    scale*=1.3
    
    main_hex = array('h', (199, 319,251, 219,371, 219,435, 319,435, 319,367, 423,255, 423))
    outer_hex = array('h', (251, 191,371, 191,411, 111,351, 47,263, 51,207, 111))
    bg_hex = array('h', (155, 53,195, 61,275, 33,303, 13,247, 13,195, 29))
    
    center_x = int(317 * scale)
    center_y = int(319 * scale)
    radius = int(325*scale)
    
    tft.ellipse(x,y, radius, radius, config.palette[3])
    for i in range(6):
        tft.polygon(outer_hex, x-center_x, y-center_y, config.palette[3], center_x=center_x, center_y=center_y, angle=angle+_ROTATE6*i, scale=scale)
    for i in range(12):
        tft.polygon(bg_hex, x-center_x, y-center_y, config.palette[3], center_x=center_x, center_y=center_y, angle=angle+_ROTATE_OUTER*i, scale=scale)
    
    tft.polygon(main_hex, x-center_x, y-center_y, config.palette[4], center_x=center_x, center_y=center_y, angle=angle, scale=scale)
    

def draw_icon(name, x, y):
    coords = {
    
    'd4':array('h', (0, 30, 35, 30, 17, 0)),
    'd6':array('h', (0,0, 26,0, 26,26, 0,26)),
    'd8':array('h', (0, 7, 12, 0, 24, 7, 24, 21, 12, 28, 0, 21)),
    'd10':array('h', (18, 0, 34, 11, 36, 22, 18, 37, 0, 22, 2, 11)),
    'd12':array('h', (14, 0, 24, 3, 30, 11, 30, 20, 24, 28, 14, 31, 6, 28, 0, 20, 0, 11, 6, 3)),
    'd20':array('h', (0, 9, 16, 0, 31, 8, 31, 27, 16, 36, 0, 27))
    }
    if name == 'd100':
        tft.ellipse(x,y,18,18,config.palette[4],fill=True)
        tft.ellipse(x,y,18,18,config.palette[1],fill=False)
    
    elif name == 'd2':
        tft.ellipse(x,y,12,12,config.palette[4], fill=True)
        tft.ellipse(x,y,12,12,config.palette[1], fill=False)
    else:
        xcoords, ycoords = splitxy(coords[name])
        avgx = int(avg(xcoords))
        avgy = int(avg(ycoords))

        x -= avgx
        y -= avgy
        tft.polygon(coords[name], x, y, config.palette[4], fill=True)
        tft.polygon(coords[name], x, y, config.palette[1], fill=False)
    

        

#--------------------------------------------------------------------------------------------------
#--------------------------------------- CLASS DEFINITIONS: ---------------------------------------
#--------------------------------------------------------------------------------------------------
die_names = ('d2','d4','d6','d8','d10','d12','d20','d100')
die_defs = {
    'd2':{'max':2,'draw':draw_d2},
    'd4':{'max':4,'draw':draw_d4},
    'd6':{'max':6,'draw':draw_d6},
    'd8':{'max':8,'draw':draw_d8},
    'd10':{'max':10,'draw':draw_d10},
    'd12':{'max':12,'draw':draw_d12},
    'd20':{'max':20,'draw':draw_d20},
    'd100':{'max':100,'draw':draw_d100},
    }

_DIE_SCALE_START = const(1)
_DIE_SCALE_FINAL = const(0.22)

_DIE_SCALE_BOUNCE = const(0.4)

_DIE_SCALE_BOUNCE_WIDTH = (_DIE_SCALE_BOUNCE-_DIE_SCALE_FINAL)
_DIE_SCALE_DROP_WIDTH = (_DIE_SCALE_START-_DIE_SCALE_BOUNCE)

_DIE_SCALE_WIDTH = (_DIE_SCALE_START-_DIE_SCALE_FINAL)

_DIE_ROTATE_DIV = const(800)
_DIE_ROTATE_DIV_MAX = const(10000)
_DIE_ROTATE_DIV_WIDTH = const(_DIE_ROTATE_DIV_MAX-_DIE_ROTATE_DIV)
_DIE_ROTATE_DIV_COIN = const(1000)

_DIE_DROP_TIME = const(500)

class Dice():
    def __init__(self):
        self.scale = _DIE_SCALE_START
        self.angle = 0
        self.visible = False
        self.die = 'd20'
        self.value = '0'
        self.prev_time = time.ticks_ms()
        self.roll_time = self.prev_time
        self.rotate_div = _DIE_ROTATE_DIV_MAX
        self.rotate_dir = 1
    
    def set_rotate_from_die(self):
        if self.die == 'd2':
            self.rotate_div = _DIE_ROTATE_DIV_COIN
        else:
            val = int(self.value)
            maximum = die_defs[self.die]['max']
            fac = 1 - (val/maximum)
            self.rotate_div = int((fac * _DIE_ROTATE_DIV_WIDTH) + _DIE_ROTATE_DIV)
        
    
    def reset_anim(self):
        self.visible = True
        self.angle = random.random()
        self.scale = _DIE_SCALE_START
        self.roll_time = time.ticks_ms()
        self.rotate_dir = random.choice((-1,1))
    
    def step_rotation(self):
        divider = self.rotate_div
        
        newtime = time.ticks_ms()
        angle_step = (time.ticks_diff(self.prev_time, newtime) / divider) * self.rotate_dir
        self.angle += angle_step
        self.prev_time = newtime
        
        if self.scale != _DIE_SCALE_FINAL:
            current_fac = time.ticks_diff(time.ticks_ms(), self.roll_time) / _DIE_DROP_TIME
            
            if current_fac >= 1:
                self.scale = _DIE_SCALE_FINAL
            else:
                ease_fac = 1- ease_out_bounce(current_fac)
                self.scale = ((_DIE_SCALE_WIDTH*ease_fac) + _DIE_SCALE_FINAL)
    
    def draw(self):
        if not self.visible:
            return
        
        die_defs[self.die]['draw'](_DISPLAY_WIDTH_HALF, _DISPLAY_HEIGHT_HALF, angle=self.angle, scale=self.scale)
        
        if self.die == 'd2':
            text = 'Heads' if self.value=='1' else 'Tails'
            tft.bitmap_text(font, 
                text,
                (_DISPLAY_WIDTH_HALF - (len(text) * _ROLL_CHAR_WIDTH_HALF))+2,
                _ROLL_Y_POSITION+3,
                color=config.palette[0]
                )
            tft.bitmap_text(font, 
                text,
                _DISPLAY_WIDTH_HALF - (len(text) * _ROLL_CHAR_WIDTH_HALF),
                _ROLL_Y_POSITION,
                color=config.palette[5]
                )
        else:
            tft.bitmap_text(font, 
                self.value,
                (_DISPLAY_WIDTH_HALF - (len(self.value) * _ROLL_CHAR_WIDTH_HALF))+2,
                _ROLL_Y_POSITION+3,
                color=config.palette[0]
                )
            tft.bitmap_text(font, 
                self.value,
                _DISPLAY_WIDTH_HALF - (len(self.value) * _ROLL_CHAR_WIDTH_HALF),
                _ROLL_Y_POSITION,
                color=config.palette[5]
                )
  
class ChaosNumber:
    def __init__(self, die):
        # string containing the current seed number
        self.number = ''
        # int represending the amount of digits added (for animation use)
        self.add_len = 0
        self.die = die
    
    def __len__(self):
        return len(self.number)
    
    def generate(self):
        # generate chaos until we have enough and key is not pressed
        self.number = ''
        
        while len(self) < _MAX_TOTAL_CHARS:
            self.add_digits()
            energy_sound(int(self.add_len))
            tft.show()
        self.add_len = 0
        while roll_is_pressed():
            self.rand_line()
            energy_sound(1)
            tft.show()
            time.sleep_ms(10)
        
        sound.stop()
        self.roll()
    
    def rand_line(self):
        # instead of adding to the number, modify it one line at a time
        line_start_idx = self.add_len*_MAX_H_CHARS
        line_end_idx = line_start_idx + _MAX_H_CHARS
        current_line = self.number[line_start_idx:line_end_idx]
        line_digits = [int(x) for x in current_line]
        
        current_line = ''
        for idx, digit in enumerate(line_digits):
            current_line = current_line + str((digit + int(adc_chaos_digit())) % 10)
        
        self.number = self.number[:line_start_idx] + current_line + self.number[line_end_idx:]
        
        self.draw_rand_line()
        self.add_len = (self.add_len + 1) % _MAX_V_CHARS
    
    def draw_rand_line(self):
        # draw number with newline highlighted
        tft.fill(config.palette[0])
        
        lines = split_lines(self.number)
        for idx, line in enumerate(lines):
            if idx == self.add_len:
                tft.text(
                    line,
                    0,
                    0+(idx*_CHAR_HEIGHT),
                    config.palette[4]
                    )
            elif idx == self.add_len - 1:
                tft.text(
                    line,
                    0,
                    0+(idx*_CHAR_HEIGHT),
                    config.palette[3]
                    )
            else:
                tft.text(
                    line,
                    0,
                    0+(idx*_CHAR_HEIGHT),
                    config.palette[2]
                    )
    
    def add_digits(self):
        r_add = random.choice((random.randint(13,30), random.randint(1,3), random.randint(1,3)))
        for i in range(r_add):
            self.number += adc_chaos_digit()
        self.add_len = r_add
        self.draw_add_digits()
    
    def draw_add_digits(self):
        # draw number as animation while adding digits
        lines = split_lines(self.number)
        
        lines_to_draw = 2
        if len(self) % _MAX_H_CHARS < self.add_len:
            lines_to_draw += 1
        
        for idx, line in enumerate(lines):
            if idx >= len(lines) - lines_to_draw:
                for cidx, char in enumerate(line):
                    color = config.palette[2]
                    
                    digit_idx = (idx*_MAX_H_CHARS) + cidx
                    
                    trail_len = self.add_len + 1
                    trail_len_half = trail_len // 2
                    
                    if digit_idx == len(self) -1:
                        color=config.palette[6]
                    elif digit_idx >= len(self) - trail_len_half:
                        color=config.palette[5]
                    elif digit_idx >= len(self) - trail_len:
                        color=config.palette[4]
                    
                    tft.rect(
                        0+(cidx*8),
                        0+(idx*8),
                        _CHAR_WIDTH,
                        _CHAR_HEIGHT,
                        color=config.palette[0],
                        fill=True
                        ) # blackout background
                    tft.text(
                        text=char,
                        x=0+(cidx*8),
                        y=0+(idx*8),
                        color=color
                        ) # draw digit

    def draw_bg(self):
        # draw number as background
        tft.fill(config.palette[0])
        
        lines = split_lines(self.number)
        for idx, line in enumerate(lines):
            tft.text(
                line,
                0,
                0+(idx*_CHAR_HEIGHT),
                config.palette[1]
                )
    
    def roll(self):
        self.draw_bg()
        self.die.reset_anim()
        self.die.value = str(rand_int_from_seed(self.number, 1, die_defs[self.die.die]['max']))
        self.die.set_rotate_from_die()
        roll_sound()
        
_SWITCHER_X = const(216)

_SWITCHER_Y_MAX = const(48)
_SWITCHER_Y_MIN = const(-40)
_SWITCHER_MOVE_DISTANCE = const(_SWITCHER_Y_MAX-_SWITCHER_Y_MIN)

_SWITCHER_HOLD_TIME = const(800)
_SWITCHER_MOVE_TIME = const(400)
        
class Switcher:
    def __init__(self):
        self.die = die_names[-2]
        self.y = _SWITCHER_Y_MAX
        self.showing = True
        self.movetime = time.ticks_ms()
        self.showtime = time.ticks_ms()
    
    def hide(self):
        self.y = _SWITCHER_Y_MIN
        self.showing=False
    
    def sound(self):
        _NOTES = (24,22,20,18,17,15,13,12)
        note = _NOTES[die_names.index(self.die)]
        beep_sound(note)
        
    def popup(self):
        self.sound()
        
        self.y=_SWITCHER_Y_MAX
        self.showing = True
        self.movetime = time.ticks_ms()
        self.showtime = time.ticks_ms()
      
    def left(self):
        idx = (die_names.index(self.die) - 1) % len(die_names)
        self.die = die_names[idx]
        self.popup()
      
    def right(self):
        idx = (die_names.index(self.die) + 1) % len(die_names)
        self.die = die_names[idx]
        self.popup()
        
        
    def animate(self):
        if self.showing:
            if time.ticks_diff(time.ticks_ms(), self.showtime) >= _SWITCHER_HOLD_TIME:
                self.showing = False
                self.movetime = time.ticks_ms()
            else:
                self.y = _SWITCHER_Y_MAX
        else: # not showing
            if self.y <= _SWITCHER_Y_MIN:
                self.y = _SWITCHER_Y_MIN
            else:
                fac = 1-(time.ticks_diff(time.ticks_ms(), self.movetime) /_SWITCHER_MOVE_TIME)
                if fac <= 0:
                    self.y = _SWITCHER_Y_MIN
                else:
                    ease = ease_out_circ(fac)
                    self.y = int(ease*_SWITCHER_MOVE_DISTANCE)+_SWITCHER_Y_MIN
    
    def draw(self):
        self.animate()
        if self.y == _SWITCHER_Y_MIN: return
        
        draw_icon(self.die, _SWITCHER_X, self.y)
        
        tft.text(self.die, _SWITCHER_X-len(self.die)*_CHAR_WIDTH_HALF, self.y-_CHAR_WIDTH_HALF, config.palette[2])

def startup_text():
    tft.fill(config.palette[1])
    tft.bitmap_text(font, 'Chaos Dice!', 34, 14, config.palette[3])
    tft.bitmap_text(font, 'Chaos Dice!', 33, 12, config.palette[4])
    tft.bitmap_text(font, 'Chaos Dice!', 32, 10, config.palette[5])
    
    tft.text('Use LEFT/RIGHT, or number row', 4, 70, config.palette[4])
    tft.text('to switch dice.', 4, 80, config.palette[4])
    
    tft.text('Press (or hold) ENTER, SPC,', 4, 100, config.palette[4])
    tft.text('or GO to roll!', 4, 110, config.palette[4])
    
#--------------------------------------------------------------------------------------------------
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main Loop: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def main_loop():
    """
    The main loop of the program. Runs forever (until program is closed).
    """
    
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INITIALIZATION: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    tft.fill(config.palette[0])
    
    die = Dice()
    chaos = ChaosNumber(die)
    switcher = Switcher()
    
    next_die = die.die
    
    show_start = True
    roll_sound()
    while True:
        
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INPUT: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                
        # get list of newly pressed keys
        keys = kb.get_new_keys()
        
        for key in keys:
            if key in _ROLL_KEYS:
                show_start = False
                die.die = switcher.die
                switcher.hide()
                chaos.generate()
                
            elif key == '/':
                switcher.right()
            elif key == ',':
                switcher.left()
            
            elif key == '@':
                switcher.die = 'd2'
                switcher.popup()
            elif key == '4':
                switcher.die = 'd4'
                switcher.popup()
            elif key == '6':
                switcher.die = 'd6'
                switcher.popup()
            elif key == '8':
                switcher.die = 'd8'
                switcher.popup()
            elif key == '0':
                switcher.die = 'd10'
                switcher.popup()
            elif key == '!':
                switcher.die = 'd12'
                switcher.popup()
            elif key == '2':
                switcher.die = 'd20'
                switcher.popup()
            elif key == '1':
                switcher.die = 'd100'
                switcher.popup()
        
        
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MAIN GRAPHICS: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        chaos.draw_bg()
        
        die.step_rotation()
        die.draw()
        
        if show_start:
            startup_text()
        
        switcher.draw()
    

            
        # write framebuffer to display
        tft.show()
        
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HOUSEKEEPING: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        # anything that needs to be done to prepare for next loop
        time.sleep_ms(1)


# start the main loop
main_loop()
